123456789101112131415161718192021222324252627282930313233343536373839 |
- #ifndef BOOST_NUMERIC_ODEINT_TOOLS_TRAITS
- #define BOOST_NUMERIC_ODEINT_TOOLS_TRAITS
- #include <type_traits>
- namespace boost {
- namespace numeric {
- namespace odeint {
- namespace detail {
- #define BOOST_NUMERIC_ODEINT_HAS_NAMED_TRAIT(trait, name) \
- template <typename T> \
- class trait \
- { \
- private: \
- using yes = char; \
- struct no { char x[2]; }; \
- \
- template <typename U> \
- static yes test(typename U::name* = nullptr); \
- \
- template <typename U> \
- static no test(...); \
- \
- public: \
- static constexpr bool value = (sizeof(test<T>(0)) == sizeof(char)); \
- };
- }
- }
- }
- }
- #endif
|