CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
template<typename TestType> \
void test();\
};\
namespace {\
template<typename...Types>\
struct TestNameClass{\
TestNameClass(){\
CATCH_INTERNAL_CHECK_UNIQUE_TYPES(Types...)\
int index = 0;\
using expander = int[];\
constexpr auto num_types = sizeof(types_list) / sizeof(types_list[0]);\
}\
};\
TestInit();\
return 0;\
}(); \
}\
CATCH_INTERNAL_UNSUPPRESS_GLOBALS_WARNINGS \
template<typename TestType> \
void TestName<TestType>::test()
219 #define INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_2(TestNameClass, TestName, ClassName, Name, Tags, TmplTypes, TypesList)\
220 CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
221 template<typename TestType> \
222 struct TestName : INTERNAL_CATCH_REMOVE_PARENS(ClassName <TestType>) { \
223 void test();\
224 };\
225 namespace {\
226 template<typename...Types>\
227 struct TestNameClass{\
228 TestNameClass(){\
229 CATCH_INTERNAL_CHECK_UNIQUE_TYPES(Types...)\
230 int index = 0;\
231 using expander = int[];\
232 constexpr char const* tmpl_types[] = {CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, INTERNAL_CATCH_REMOVE_PARENS(TmplTypes))};\
233 constexpr char const* types_list[] = {CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, INTERNAL_CATCH_REMOVE_PARENS(TypesList))};\
234 constexpr auto num_types = sizeof(types_list) / sizeof(types_list[0]);\
235 (void)expander{(Catch::AutoReg( Catch::makeTestInvoker( &TestName<Types>::test ), CATCH_INTERNAL_LINEINFO, #ClassName, Catch::NameAndTags{ Name " - " + std::string(tmpl_types[index / num_types]) + "<" + std::string(types_list[index % num_types]) + ">", Tags } ), index++, 0)... }; \
236 }\
237 };\
238 static int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){\
239 using TestInit = Catch::combine<INTERNAL_CATCH_REMOVE_PARENS(TmplTypes)>\
240 ::with_types<INTERNAL_CATCH_MAKE_TYPE_LISTS_FROM_TYPES(TypesList)>::into<TestNameClass>::type;\
241 TestInit();\
242 return 0;\
243 }(); \
244 }\
245 CATCH_INTERNAL_UNSUPPRESS_GLOBALS_WARNINGS \
246 template<typename TestType> \
247 void TestName<TestType>::test()