Boost C++ Libraries of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

This is the documentation for an old version of Boost. Click here to view this page for the latest version.



 Extract true value type from complex types (eg. std::complex)

 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


#include <boost/utility.hpp>
#include <boost/mpl/has_xxx.hpp>


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;

} } } }