18 #ifndef GZ_PHYSICS_TEMPLATEHELPERS_HH_
19 #define GZ_PHYSICS_TEMPLATEHELPERS_HH_
21 #include <type_traits>
32 template <
class... T>
struct type { };
52 template <
typename To,
typename From>
55 template <
typename To,
typename From>
76 #define GZ_PHYSICS_CREATE_SELECTOR(X) \
77 template<typename InFeature> \
80 template<typename F, typename PolicyT, typename FeaturesT, \
81 typename = std::void_t<>> \
82 struct Implementation \
84 using type = ::gz::physics::Empty; \
87 template<typename F, typename PolicyT, typename FeaturesT> \
88 struct Implementation<F, PolicyT, FeaturesT, \
90 typename F::template X <PolicyT, FeaturesT>>> \
92 using type = typename F::template X <PolicyT, FeaturesT>; \
95 template <typename PolicyT, typename FeaturesT> \
96 using type = typename Implementation<InFeature, PolicyT, FeaturesT>::type; \