12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- /*
- [auto_generated]
- boost/numeric/odeint/algebra/detail/extract_value_type.hpp
- [begin_description]
- Extract true value type from complex types (eg. std::complex)
- [end_description]
- Copyright 2013 Karsten Ahnert
- Copyright 2013 Mario Mulansky
- Distributed under 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_ALGEBRA_DETAIL_EXTRACT_VALUE_TYPE_HPP_INCLUDED
- #define BOOST_NUMERIC_ODEINT_ALGEBRA_DETAIL_EXTRACT_VALUE_TYPE_HPP_INCLUDED
- #include <boost/utility.hpp>
- #include <boost/mpl/has_xxx.hpp>
- BOOST_MPL_HAS_XXX_TRAIT_DEF(value_type)
- namespace boost {
- namespace numeric {
- namespace odeint {
- namespace detail {
- template< typename S , typename Enabler = void >
- struct extract_value_type {};
- // as long as value_types are defined we go down the value_type chain
- // e.g. returning S::value_type::value_type::value_type
- template< typename S >
- struct extract_value_type<S , typename boost::disable_if< has_value_type<S> >::type >
- {
- // no value_type defined, return S
- typedef S type;
- };
- template< typename S >
- struct extract_value_type< S , typename boost::enable_if< has_value_type<S> >::type >
- {
- // go down the value_type
- typedef typename extract_value_type< typename S::value_type >::type type;
- };
- } } } }
- #endif
|