// Copyright Matt Borland 2021 - 2023. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_NUMERIC_ODEINT_TOOLS_TRAITS #define BOOST_NUMERIC_ODEINT_TOOLS_TRAITS #include namespace boost { namespace numeric { namespace odeint { namespace detail { #define BOOST_NUMERIC_ODEINT_HAS_NAMED_TRAIT(trait, name) \ template \ class trait \ { \ private: \ using yes = char; \ struct no { char x[2]; }; \ \ template \ static yes test(typename U::name* = nullptr); \ \ template \ static no test(...); \ \ public: \ static constexpr bool value = (sizeof(test(0)) == sizeof(char)); \ }; } //namespace detail } //namespace odeint } //namespace numeric } //namespace boost #endif //BOOST_NUMERIC_ODEINT_TOOLS_TRAITS