From f0fb2a1d022785d2bc6bacb3045bc0830ad1dabb Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Tue, 11 Dec 2018 13:35:13 +0100 Subject: [PATCH 1/2] Use BOOST_PP_VARIADIC_ELEM --- include/turtle/mock.hpp | 43 +++++++++++++++++++---------------------- 1 file changed, 20 insertions(+), 23 deletions(-) diff --git a/include/turtle/mock.hpp b/include/turtle/mock.hpp index a5f1f1c..4cb57cf 100644 --- a/include/turtle/mock.hpp +++ b/include/turtle/mock.hpp @@ -21,6 +21,7 @@ #include "detail/parameter.hpp" #include #include +#include #include #include @@ -179,53 +180,49 @@ #ifdef MOCK_VARIADIC_MACROS -#define MOCK_VARIADIC_ELEM_0(e0, ...) e0 -#define MOCK_VARIADIC_ELEM_1(e0, e1, ...) e1 -#define MOCK_VARIADIC_ELEM_2(e0, e1, e2, ...) e2 - #define MOCK_METHOD(M, ...) \ MOCK_METHOD_EXT(M, \ - MOCK_VARIADIC_ELEM_0(__VA_ARGS__ ), \ - MOCK_VARIADIC_ELEM_1(__VA_ARGS__, MOCK_SIGNATURE(M)), \ - MOCK_VARIADIC_ELEM_2(__VA_ARGS__, M, M)) + BOOST_PP_VARIADIC_ELEM(0, __VA_ARGS__ ), \ + BOOST_PP_VARIADIC_ELEM(1, __VA_ARGS__, MOCK_SIGNATURE(M)), \ + BOOST_PP_VARIADIC_ELEM(2, __VA_ARGS__, M, M)) #define MOCK_CONST_METHOD(M, n, ...) \ MOCK_CONST_METHOD_EXT(M, n, \ - MOCK_VARIADIC_ELEM_0(__VA_ARGS__), \ - MOCK_VARIADIC_ELEM_1(__VA_ARGS__, M)) + BOOST_PP_VARIADIC_ELEM(0, __VA_ARGS__), \ + BOOST_PP_VARIADIC_ELEM(1, __VA_ARGS__, M)) #define MOCK_NON_CONST_METHOD(M, n, ...) \ MOCK_NON_CONST_METHOD_EXT(M, n, \ - MOCK_VARIADIC_ELEM_0(__VA_ARGS__), \ - MOCK_VARIADIC_ELEM_1(__VA_ARGS__, M)) + BOOST_PP_VARIADIC_ELEM(0, __VA_ARGS__), \ + BOOST_PP_VARIADIC_ELEM(1, __VA_ARGS__, M)) #define MOCK_METHOD_TPL(M, n, ...) \ MOCK_METHOD_EXT_TPL(M, n, \ - MOCK_VARIADIC_ELEM_0(__VA_ARGS__), \ - MOCK_VARIADIC_ELEM_1(__VA_ARGS__, M)) + BOOST_PP_VARIADIC_ELEM(0, __VA_ARGS__), \ + BOOST_PP_VARIADIC_ELEM(1, __VA_ARGS__, M)) #define MOCK_CONST_METHOD_TPL(M, n, ...) \ MOCK_CONST_METHOD_EXT_TPL(M, n, \ - MOCK_VARIADIC_ELEM_0(__VA_ARGS__), \ - MOCK_VARIADIC_ELEM_1(__VA_ARGS__, M)) + BOOST_PP_VARIADIC_ELEM(0, __VA_ARGS__), \ + BOOST_PP_VARIADIC_ELEM(1, __VA_ARGS__, M)) #define MOCK_NON_CONST_METHOD_TPL(M, n, ...) \ MOCK_NON_CONST_METHOD_EXT_TPL(M, n, \ - MOCK_VARIADIC_ELEM_0(__VA_ARGS__), \ - MOCK_VARIADIC_ELEM_1(__VA_ARGS__, M)) + BOOST_PP_VARIADIC_ELEM(0, __VA_ARGS__), \ + BOOST_PP_VARIADIC_ELEM(1, __VA_ARGS__, M)) #define MOCK_FUNCTION(F, n, ...) \ MOCK_FUNCTION_AUX(F, n, \ - MOCK_VARIADIC_ELEM_0(__VA_ARGS__), \ - MOCK_VARIADIC_ELEM_1(__VA_ARGS__, F), \ + BOOST_PP_VARIADIC_ELEM(0, __VA_ARGS__), \ + BOOST_PP_VARIADIC_ELEM(1, __VA_ARGS__, F), \ inline,) #define MOCK_STATIC_METHOD(F, n, ...) \ MOCK_FUNCTION_AUX(F, n, \ - MOCK_VARIADIC_ELEM_0(__VA_ARGS__), \ - MOCK_VARIADIC_ELEM_1(__VA_ARGS__, F), \ + BOOST_PP_VARIADIC_ELEM(0, __VA_ARGS__), \ + BOOST_PP_VARIADIC_ELEM(1, __VA_ARGS__, F), \ static,) #define MOCK_STATIC_METHOD_TPL(F, n, ...) \ MOCK_FUNCTION_AUX(F, n, \ - MOCK_VARIADIC_ELEM_0(__VA_ARGS__), \ - MOCK_VARIADIC_ELEM_1(__VA_ARGS__, F), \ + BOOST_PP_VARIADIC_ELEM(0, __VA_ARGS__), \ + BOOST_PP_VARIADIC_ELEM(1, __VA_ARGS__, F), \ static, typename) #else // MOCK_VARIADIC_MACROS From 45574d708bf66105f5877092420aea66ce9efd65 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Tue, 11 Dec 2018 16:38:02 +0100 Subject: [PATCH 2/2] Add comma to MOCK_VARIADIC_ELEM_N calls Avoids warning "must specify at least one argument for '...' parameter of variadic macro" on e.g. Clang --- include/turtle/mock.hpp | 43 ++++++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/include/turtle/mock.hpp b/include/turtle/mock.hpp index 4cb57cf..0b44e02 100644 --- a/include/turtle/mock.hpp +++ b/include/turtle/mock.hpp @@ -21,7 +21,6 @@ #include "detail/parameter.hpp" #include #include -#include #include #include @@ -180,49 +179,53 @@ #ifdef MOCK_VARIADIC_MACROS +#define MOCK_VARIADIC_ELEM_0(e0, ...) e0 +#define MOCK_VARIADIC_ELEM_1(e0, e1, ...) e1 +#define MOCK_VARIADIC_ELEM_2(e0, e1, e2, ...) e2 + #define MOCK_METHOD(M, ...) \ MOCK_METHOD_EXT(M, \ - BOOST_PP_VARIADIC_ELEM(0, __VA_ARGS__ ), \ - BOOST_PP_VARIADIC_ELEM(1, __VA_ARGS__, MOCK_SIGNATURE(M)), \ - BOOST_PP_VARIADIC_ELEM(2, __VA_ARGS__, M, M)) + MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), \ + MOCK_VARIADIC_ELEM_1(__VA_ARGS__, MOCK_SIGNATURE(M), ), \ + MOCK_VARIADIC_ELEM_2(__VA_ARGS__, M, M, )) #define MOCK_CONST_METHOD(M, n, ...) \ MOCK_CONST_METHOD_EXT(M, n, \ - BOOST_PP_VARIADIC_ELEM(0, __VA_ARGS__), \ - BOOST_PP_VARIADIC_ELEM(1, __VA_ARGS__, M)) + MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), \ + MOCK_VARIADIC_ELEM_1(__VA_ARGS__, M, )) #define MOCK_NON_CONST_METHOD(M, n, ...) \ MOCK_NON_CONST_METHOD_EXT(M, n, \ - BOOST_PP_VARIADIC_ELEM(0, __VA_ARGS__), \ - BOOST_PP_VARIADIC_ELEM(1, __VA_ARGS__, M)) + MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), \ + MOCK_VARIADIC_ELEM_1(__VA_ARGS__, M, )) #define MOCK_METHOD_TPL(M, n, ...) \ MOCK_METHOD_EXT_TPL(M, n, \ - BOOST_PP_VARIADIC_ELEM(0, __VA_ARGS__), \ - BOOST_PP_VARIADIC_ELEM(1, __VA_ARGS__, M)) + MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), \ + MOCK_VARIADIC_ELEM_1(__VA_ARGS__, M, )) #define MOCK_CONST_METHOD_TPL(M, n, ...) \ MOCK_CONST_METHOD_EXT_TPL(M, n, \ - BOOST_PP_VARIADIC_ELEM(0, __VA_ARGS__), \ - BOOST_PP_VARIADIC_ELEM(1, __VA_ARGS__, M)) + MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), \ + MOCK_VARIADIC_ELEM_1(__VA_ARGS__, M, )) #define MOCK_NON_CONST_METHOD_TPL(M, n, ...) \ MOCK_NON_CONST_METHOD_EXT_TPL(M, n, \ - BOOST_PP_VARIADIC_ELEM(0, __VA_ARGS__), \ - BOOST_PP_VARIADIC_ELEM(1, __VA_ARGS__, M)) + MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), \ + MOCK_VARIADIC_ELEM_1(__VA_ARGS__, M, )) #define MOCK_FUNCTION(F, n, ...) \ MOCK_FUNCTION_AUX(F, n, \ - BOOST_PP_VARIADIC_ELEM(0, __VA_ARGS__), \ - BOOST_PP_VARIADIC_ELEM(1, __VA_ARGS__, F), \ + MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), \ + MOCK_VARIADIC_ELEM_1(__VA_ARGS__, F, ), \ inline,) #define MOCK_STATIC_METHOD(F, n, ...) \ MOCK_FUNCTION_AUX(F, n, \ - BOOST_PP_VARIADIC_ELEM(0, __VA_ARGS__), \ - BOOST_PP_VARIADIC_ELEM(1, __VA_ARGS__, F), \ + MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), \ + MOCK_VARIADIC_ELEM_1(__VA_ARGS__, F, ), \ static,) #define MOCK_STATIC_METHOD_TPL(F, n, ...) \ MOCK_FUNCTION_AUX(F, n, \ - BOOST_PP_VARIADIC_ELEM(0, __VA_ARGS__), \ - BOOST_PP_VARIADIC_ELEM(1, __VA_ARGS__, F), \ + MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), \ + MOCK_VARIADIC_ELEM_1(__VA_ARGS__, F, ), \ static, typename) #else // MOCK_VARIADIC_MACROS