33 #ifndef DART_COMMON_DETAIL_COMPOSITEJOINER_HPP_
34 #define DART_COMMON_DETAIL_COMPOSITEJOINER_HPP_
43 template <
class Base1,
class Base2>
44 template <
typename Base1Arg,
typename... Base2Args>
46 Base1Arg&& arg1, Base2Args&&... args2)
47 : Base1(
std::forward<Base1Arg>(arg1)),
48 Base2(
std::forward<Base2Args>(args2)...)
54 template <
class Base1,
class Base2>
55 template <
typename Base1Arg>
57 : Base1(
std::forward<Base1Arg>(arg1)), Base2()
63 template <
class Base1,
class Base2>
64 template <
typename... Base2Args>
66 : Base1(), Base2(
std::forward<Base2Args>(args2)...)
83 (
std::unique_ptr<T> && aspect),
94 template <class Base1, class Base2>
95 template <class T, typename... Args>
98 if (Base1::template isSpecializedFor<T>())
99 return Base1::template createAspect<T, Args...>(
100 std::forward<Args>(args)...);
102 return Base2::template createAspect<T, Args...>(std::forward<Args>(args)...);
106 template <
class Base1,
class Base2>
111 Base1::template isSpecializedFor<T>()
112 || Base2::template isSpecializedFor<T>());
116 template <
class Base1,
class Base2,
class... OtherBases>
117 template <
typename... Args>
120 std::forward<Args>(args)...)
#define DETAIL_DART_COMMON_TEMPLATEJOINERDISPATCH_IMPL( ReturnType, ClassName, Function, Suffix, Args)
Definition: TemplateJoinerDispatchMacro.hpp:54
Terminator for the variadic template.
Definition: CompositeJoiner.hpp:45
NoArgTag
Used to tag arguments as blank for in variadic joiner classes such as common::CompositeJoiner and dyn...
Definition: Empty.hpp:48
Definition: BulletCollisionDetector.cpp:65
Definition: SharedLibraryManager.hpp:46