1 #ifndef BOOST_TYPE_TRAITS_COMMON_TYPE_HPP_INCLUDED
2 #define BOOST_TYPE_TRAITS_COMMON_TYPE_HPP_INCLUDED
17 #if defined(BOOST_NO_CXX11_DECLTYPE)
21 #if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
30 #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
36 #if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES)
40 namespace type_traits_detail
47 template<
class T1,
class T2,
class...
T>
54 template<
class T1,
class T2,
class...
T>
59 #endif // !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES)
66 class T7 =
void,
class T8 =
void,
class T9 =
void
68 struct common_type: common_type<typename common_type<T1, T2>::type, T3, T4, T5, T6, T7, T8, T9>
72 #endif // !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
82 namespace type_traits_detail
87 #if !defined(BOOST_NO_CXX11_DECLTYPE)
89 #if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
91 #if !defined(BOOST_MSVC) || BOOST_MSVC > 1800
103 template<
class T1,
class T2>
using builtin_common_type = decltype( boost::declval<bool>()? boost::declval<T1>(): boost::declval<T2>() );
105 template<
class T1,
class T2>
struct common_type_impl_2:
mp_defer<builtin_common_type, T1, T2>
111 template<
class T1,
class T2>
struct common_type_impl:
mp_defer<decay_common_type, T1, T2>
115 #endif // !defined(BOOST_MSVC) || BOOST_MSVC > 1800
119 template<
class T1,
class T2>
struct common_type_impl:
boost::decay<decltype( boost::declval<bool>()? boost::declval<T1>(): boost::declval<T2>() )>
123 #endif // #if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
125 #endif // #if !defined(BOOST_NO_CXX11_DECLTYPE)
145 #endif // #ifndef BOOST_TYPE_TRAITS_COMMON_TYPE_HPP_INCLUDED