forked from boostorg/detail
Remove BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
Process #ifndef...#else...#endif blocks. [SVN r86245]
This commit is contained in:
@@ -31,7 +31,6 @@ namespace boost { namespace detail {
|
|||||||
|
|
||||||
namespace indirect_traits {
|
namespace indirect_traits {
|
||||||
|
|
||||||
# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
|
|
||||||
template <class T>
|
template <class T>
|
||||||
struct is_reference_to_const : mpl::false_
|
struct is_reference_to_const : mpl::false_
|
||||||
{
|
{
|
||||||
@@ -196,284 +195,6 @@ struct is_pointer_to_class
|
|||||||
BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_pointer_to_class,(T))
|
BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_pointer_to_class,(T))
|
||||||
};
|
};
|
||||||
|
|
||||||
# else
|
|
||||||
|
|
||||||
using namespace boost::detail::is_function_ref_tester_;
|
|
||||||
|
|
||||||
typedef char (&inner_yes_type)[3];
|
|
||||||
typedef char (&inner_no_type)[2];
|
|
||||||
typedef char (&outer_no_type)[1];
|
|
||||||
|
|
||||||
template <typename V>
|
|
||||||
struct is_const_help
|
|
||||||
{
|
|
||||||
typedef typename mpl::if_<
|
|
||||||
is_const<V>
|
|
||||||
, inner_yes_type
|
|
||||||
, inner_no_type
|
|
||||||
>::type type;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename V>
|
|
||||||
struct is_volatile_help
|
|
||||||
{
|
|
||||||
typedef typename mpl::if_<
|
|
||||||
is_volatile<V>
|
|
||||||
, inner_yes_type
|
|
||||||
, inner_no_type
|
|
||||||
>::type type;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename V>
|
|
||||||
struct is_pointer_help
|
|
||||||
{
|
|
||||||
typedef typename mpl::if_<
|
|
||||||
is_pointer<V>
|
|
||||||
, inner_yes_type
|
|
||||||
, inner_no_type
|
|
||||||
>::type type;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename V>
|
|
||||||
struct is_class_help
|
|
||||||
{
|
|
||||||
typedef typename mpl::if_<
|
|
||||||
is_class<V>
|
|
||||||
, inner_yes_type
|
|
||||||
, inner_no_type
|
|
||||||
>::type type;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <class T>
|
|
||||||
struct is_reference_to_function_aux
|
|
||||||
{
|
|
||||||
static T t;
|
|
||||||
BOOST_STATIC_CONSTANT(
|
|
||||||
bool, value = sizeof(detail::is_function_ref_tester(t,0)) == sizeof(::boost::type_traits::yes_type));
|
|
||||||
typedef mpl::bool_<value> type;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <class T>
|
|
||||||
struct is_reference_to_function
|
|
||||||
: mpl::if_<is_reference<T>, is_reference_to_function_aux<T>, mpl::bool_<false> >::type
|
|
||||||
{
|
|
||||||
};
|
|
||||||
|
|
||||||
template <class T>
|
|
||||||
struct is_pointer_to_function_aux
|
|
||||||
{
|
|
||||||
static T t;
|
|
||||||
BOOST_STATIC_CONSTANT(
|
|
||||||
bool, value
|
|
||||||
= sizeof(::boost::type_traits::is_function_ptr_tester(t)) == sizeof(::boost::type_traits::yes_type));
|
|
||||||
typedef mpl::bool_<value> type;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <class T>
|
|
||||||
struct is_pointer_to_function
|
|
||||||
: mpl::if_<is_pointer<T>, is_pointer_to_function_aux<T>, mpl::bool_<false> >::type
|
|
||||||
{
|
|
||||||
BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_pointer_to_function,(T))
|
|
||||||
};
|
|
||||||
|
|
||||||
struct false_helper1
|
|
||||||
{
|
|
||||||
template <class T>
|
|
||||||
struct apply : mpl::false_
|
|
||||||
{
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename V>
|
|
||||||
typename is_const_help<V>::type reference_to_const_helper(V&);
|
|
||||||
outer_no_type
|
|
||||||
reference_to_const_helper(...);
|
|
||||||
|
|
||||||
struct true_helper1
|
|
||||||
{
|
|
||||||
template <class T>
|
|
||||||
struct apply
|
|
||||||
{
|
|
||||||
static T t;
|
|
||||||
BOOST_STATIC_CONSTANT(
|
|
||||||
bool, value
|
|
||||||
= sizeof(reference_to_const_helper(t)) == sizeof(inner_yes_type));
|
|
||||||
typedef mpl::bool_<value> type;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
template <bool ref = true>
|
|
||||||
struct is_reference_to_const_helper1 : true_helper1
|
|
||||||
{
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct is_reference_to_const_helper1<false> : false_helper1
|
|
||||||
{
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
template <class T>
|
|
||||||
struct is_reference_to_const
|
|
||||||
: is_reference_to_const_helper1<is_reference<T>::value>::template apply<T>
|
|
||||||
{
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
template <bool ref = true>
|
|
||||||
struct is_reference_to_non_const_helper1
|
|
||||||
{
|
|
||||||
template <class T>
|
|
||||||
struct apply
|
|
||||||
{
|
|
||||||
static T t;
|
|
||||||
BOOST_STATIC_CONSTANT(
|
|
||||||
bool, value
|
|
||||||
= sizeof(reference_to_const_helper(t)) == sizeof(inner_no_type));
|
|
||||||
|
|
||||||
typedef mpl::bool_<value> type;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct is_reference_to_non_const_helper1<false> : false_helper1
|
|
||||||
{
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
template <class T>
|
|
||||||
struct is_reference_to_non_const
|
|
||||||
: is_reference_to_non_const_helper1<is_reference<T>::value>::template apply<T>
|
|
||||||
{
|
|
||||||
BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_non_const,(T))
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
template <typename V>
|
|
||||||
typename is_volatile_help<V>::type reference_to_volatile_helper(V&);
|
|
||||||
outer_no_type
|
|
||||||
reference_to_volatile_helper(...);
|
|
||||||
|
|
||||||
template <bool ref = true>
|
|
||||||
struct is_reference_to_volatile_helper1
|
|
||||||
{
|
|
||||||
template <class T>
|
|
||||||
struct apply
|
|
||||||
{
|
|
||||||
static T t;
|
|
||||||
BOOST_STATIC_CONSTANT(
|
|
||||||
bool, value
|
|
||||||
= sizeof(reference_to_volatile_helper(t)) == sizeof(inner_yes_type));
|
|
||||||
typedef mpl::bool_<value> type;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct is_reference_to_volatile_helper1<false> : false_helper1
|
|
||||||
{
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
template <class T>
|
|
||||||
struct is_reference_to_volatile
|
|
||||||
: is_reference_to_volatile_helper1<is_reference<T>::value>::template apply<T>
|
|
||||||
{
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename V>
|
|
||||||
typename is_pointer_help<V>::type reference_to_pointer_helper(V&);
|
|
||||||
outer_no_type reference_to_pointer_helper(...);
|
|
||||||
|
|
||||||
template <class T>
|
|
||||||
struct reference_to_pointer_impl
|
|
||||||
{
|
|
||||||
static T t;
|
|
||||||
BOOST_STATIC_CONSTANT(
|
|
||||||
bool, value
|
|
||||||
= (sizeof((reference_to_pointer_helper)(t)) == sizeof(inner_yes_type))
|
|
||||||
);
|
|
||||||
|
|
||||||
typedef mpl::bool_<value> type;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <class T>
|
|
||||||
struct is_reference_to_pointer
|
|
||||||
: mpl::eval_if<is_reference<T>, reference_to_pointer_impl<T>, mpl::false_>::type
|
|
||||||
{
|
|
||||||
BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_pointer,(T))
|
|
||||||
};
|
|
||||||
|
|
||||||
template <class T>
|
|
||||||
struct is_reference_to_function_pointer
|
|
||||||
: mpl::eval_if<is_reference<T>, is_pointer_to_function_aux<T>, mpl::false_>::type
|
|
||||||
{
|
|
||||||
BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_function_pointer,(T))
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
template <class T>
|
|
||||||
struct is_member_function_pointer_help
|
|
||||||
: mpl::if_<is_member_function_pointer<T>, inner_yes_type, inner_no_type>
|
|
||||||
{};
|
|
||||||
|
|
||||||
template <typename V>
|
|
||||||
typename is_member_function_pointer_help<V>::type member_function_pointer_helper(V&);
|
|
||||||
outer_no_type member_function_pointer_helper(...);
|
|
||||||
|
|
||||||
template <class T>
|
|
||||||
struct is_pointer_to_member_function_aux
|
|
||||||
{
|
|
||||||
static T t;
|
|
||||||
BOOST_STATIC_CONSTANT(
|
|
||||||
bool, value
|
|
||||||
= sizeof((member_function_pointer_helper)(t)) == sizeof(inner_yes_type));
|
|
||||||
typedef mpl::bool_<value> type;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <class T>
|
|
||||||
struct is_reference_to_member_function_pointer
|
|
||||||
: mpl::if_<
|
|
||||||
is_reference<T>
|
|
||||||
, is_pointer_to_member_function_aux<T>
|
|
||||||
, mpl::bool_<false>
|
|
||||||
>::type
|
|
||||||
{
|
|
||||||
BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_member_function_pointer,(T))
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename V>
|
|
||||||
typename is_class_help<V>::type reference_to_class_helper(V const volatile&);
|
|
||||||
outer_no_type reference_to_class_helper(...);
|
|
||||||
|
|
||||||
template <class T>
|
|
||||||
struct is_reference_to_class
|
|
||||||
{
|
|
||||||
static T t;
|
|
||||||
BOOST_STATIC_CONSTANT(
|
|
||||||
bool, value
|
|
||||||
= (is_reference<T>::value
|
|
||||||
& (sizeof(reference_to_class_helper(t)) == sizeof(inner_yes_type)))
|
|
||||||
);
|
|
||||||
typedef mpl::bool_<value> type;
|
|
||||||
BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_class,(T))
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename V>
|
|
||||||
typename is_class_help<V>::type pointer_to_class_helper(V const volatile*);
|
|
||||||
outer_no_type pointer_to_class_helper(...);
|
|
||||||
|
|
||||||
template <class T>
|
|
||||||
struct is_pointer_to_class
|
|
||||||
{
|
|
||||||
static T t;
|
|
||||||
BOOST_STATIC_CONSTANT(
|
|
||||||
bool, value
|
|
||||||
= (is_pointer<T>::value
|
|
||||||
&& sizeof(pointer_to_class_helper(t)) == sizeof(inner_yes_type))
|
|
||||||
);
|
|
||||||
typedef mpl::bool_<value> type;
|
|
||||||
};
|
|
||||||
# endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -258,7 +258,6 @@ struct stlport_40_debug_iterator_traits
|
|||||||
|
|
||||||
template <class T> struct pointer_iterator_traits;
|
template <class T> struct pointer_iterator_traits;
|
||||||
|
|
||||||
# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
|
|
||||||
template <class T>
|
template <class T>
|
||||||
struct pointer_iterator_traits<T*>
|
struct pointer_iterator_traits<T*>
|
||||||
{
|
{
|
||||||
@@ -268,50 +267,6 @@ struct pointer_iterator_traits<T*>
|
|||||||
typedef std::random_access_iterator_tag iterator_category;
|
typedef std::random_access_iterator_tag iterator_category;
|
||||||
typedef std::ptrdiff_t difference_type;
|
typedef std::ptrdiff_t difference_type;
|
||||||
};
|
};
|
||||||
# else
|
|
||||||
|
|
||||||
// In case of no template partial specialization, and if T is a
|
|
||||||
// pointer, iterator_traits<T>::value_type can still be computed. For
|
|
||||||
// some basic types, remove_pointer is manually defined in
|
|
||||||
// type_traits/broken_compiler_spec.hpp. For others, do it yourself.
|
|
||||||
|
|
||||||
template<class P> class please_invoke_BOOST_TT_BROKEN_COMPILER_SPEC_on_cv_unqualified_pointee;
|
|
||||||
|
|
||||||
template<class P>
|
|
||||||
struct pointer_value_type
|
|
||||||
: mpl::if_<
|
|
||||||
is_same<P, typename remove_pointer<P>::type>
|
|
||||||
, please_invoke_BOOST_TT_BROKEN_COMPILER_SPEC_on_cv_unqualified_pointee<P>
|
|
||||||
, typename remove_const<
|
|
||||||
typename remove_pointer<P>::type
|
|
||||||
>::type
|
|
||||||
>
|
|
||||||
{
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
template<class P>
|
|
||||||
struct pointer_reference
|
|
||||||
: mpl::if_<
|
|
||||||
is_same<P, typename remove_pointer<P>::type>
|
|
||||||
, please_invoke_BOOST_TT_BROKEN_COMPILER_SPEC_on_cv_unqualified_pointee<P>
|
|
||||||
, typename remove_pointer<P>::type&
|
|
||||||
>
|
|
||||||
{
|
|
||||||
};
|
|
||||||
|
|
||||||
template <class T>
|
|
||||||
struct pointer_iterator_traits
|
|
||||||
{
|
|
||||||
typedef T pointer;
|
|
||||||
typedef std::random_access_iterator_tag iterator_category;
|
|
||||||
typedef std::ptrdiff_t difference_type;
|
|
||||||
|
|
||||||
typedef typename pointer_value_type<T>::type value_type;
|
|
||||||
typedef typename pointer_reference<T>::type reference;
|
|
||||||
};
|
|
||||||
|
|
||||||
# endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
|
|
||||||
|
|
||||||
// We'll sort iterator types into one of these classifications, from which we
|
// We'll sort iterator types into one of these classifications, from which we
|
||||||
// can determine the difference_type, pointer, reference, and value_type
|
// can determine the difference_type, pointer, reference, and value_type
|
||||||
|
@@ -15,13 +15,8 @@
|
|||||||
|
|
||||||
#include "boost/config.hpp"
|
#include "boost/config.hpp"
|
||||||
|
|
||||||
#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
|
|
||||||
# include "boost/mpl/bool.hpp"
|
# include "boost/mpl/bool.hpp"
|
||||||
# include "boost/type_traits/has_nothrow_copy.hpp"
|
# include "boost/type_traits/has_nothrow_copy.hpp"
|
||||||
#else
|
|
||||||
# include "boost/mpl/if.hpp"
|
|
||||||
# include "boost/type_traits/is_reference.hpp"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "boost/mpl/void.hpp"
|
#include "boost/mpl/void.hpp"
|
||||||
|
|
||||||
@@ -78,7 +73,6 @@ public: // queries
|
|||||||
|
|
||||||
template <typename T = mpl::void_> struct make_reference_content;
|
template <typename T = mpl::void_> struct make_reference_content;
|
||||||
|
|
||||||
#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
|
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct make_reference_content
|
struct make_reference_content
|
||||||
@@ -92,19 +86,6 @@ struct make_reference_content< T& >
|
|||||||
typedef reference_content<T&> type;
|
typedef reference_content<T&> type;
|
||||||
};
|
};
|
||||||
|
|
||||||
#else // defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct make_reference_content
|
|
||||||
: mpl::if_<
|
|
||||||
is_reference<T>
|
|
||||||
, reference_content<T>
|
|
||||||
, T
|
|
||||||
>
|
|
||||||
{
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION workaround
|
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
struct make_reference_content< mpl::void_ >
|
struct make_reference_content< mpl::void_ >
|
||||||
|
Reference in New Issue
Block a user