29template<
typename ElementTypeB>
class TypeB;
31template<
typename ElementTypeA>
34 template<
typename ElementType>
friend class TypeB;
37 ElementTypeA m_data{};
40 TypeA(ElementTypeA v = ElementTypeA{}):
44 template<
typename ElementType>
51 template<
typename Type>
auto sum(Type a, Type b);
54 template<
typename Type,
typename... Types>
57 return (first + ... + args);
62template<
typename ElementTypeB>
68 template<
typename ElementType>
friend class TypeA;
71 ElementTypeB m_data{};
74 TypeB(ElementTypeB v = ElementTypeB{} ): m_data { v }
78 template<
typename ElementType>
85 template<
typename Type,
typename... Types>
86 static auto products(Type first, Types... args);
89template<
typename Type>
96template<
typename ElementTypeA>
97 template<
typename Type>
104template<
typename ElementType>
105 template<
typename Type,
typename... Types>
108 return (first * ... * args);
126 auto rlt = a.
sum(4, 6);
int summation(int a, int b)
void test_template_non_static_member_function()
void test_out_of_class_static_member_functions()
void test_out_of_class_definition()
void operation_over_type_b(TypeB< ElementType > b)
static auto summation(Type first, Types... args)
void operation_over_type_b(TypeB< ElementTypeB > b)
TypeA(ElementTypeA v=ElementTypeA{})
void operation_over_type_a(TypeA< ElementType > a)
TypeB(ElementTypeB v=ElementTypeB{})
void operation_over_type_a(TypeA< ElementTypeA > a)
static auto products(Type first, Types... args)
auto product(std::vector< ElementType > const &A, std::vector< ElementType > const &B, VectorTypes... tails)