mirror of
https://github.com/boostorg/utility.git
synced 2025-05-09 15:04:00 +00:00
Remove BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
Process #ifndef...#else...#endif blocks. [SVN r86245]
This commit is contained in:
parent
3bac7b132a
commit
514e5299ca
@ -704,7 +704,6 @@ struct random_access_iteratable
|
|||||||
// the xxxx, xxxx1, and xxxx2 templates, importing them into boost:: as
|
// the xxxx, xxxx1, and xxxx2 templates, importing them into boost:: as
|
||||||
// necessary.
|
// necessary.
|
||||||
//
|
//
|
||||||
#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
|
|
||||||
|
|
||||||
// is_chained_base<> - a traits class used to distinguish whether an operator
|
// is_chained_base<> - a traits class used to distinguish whether an operator
|
||||||
// template argument is being used for base class chaining, or is specifying a
|
// template argument is being used for base class chaining, or is specifying a
|
||||||
@ -802,24 +801,6 @@ BOOST_OPERATOR_TEMPLATE2(template_name##2) \
|
|||||||
BOOST_OPERATOR_TEMPLATE1(template_name##1)
|
BOOST_OPERATOR_TEMPLATE1(template_name##1)
|
||||||
|
|
||||||
|
|
||||||
#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
|
|
||||||
|
|
||||||
# define BOOST_OPERATOR_TEMPLATE4(template_name4) \
|
|
||||||
BOOST_IMPORT_TEMPLATE4(template_name4)
|
|
||||||
# define BOOST_OPERATOR_TEMPLATE3(template_name3) \
|
|
||||||
BOOST_IMPORT_TEMPLATE3(template_name3)
|
|
||||||
# define BOOST_OPERATOR_TEMPLATE2(template_name2) \
|
|
||||||
BOOST_IMPORT_TEMPLATE2(template_name2)
|
|
||||||
# define BOOST_OPERATOR_TEMPLATE1(template_name1) \
|
|
||||||
BOOST_IMPORT_TEMPLATE1(template_name1)
|
|
||||||
|
|
||||||
// In this case we can only assume that template_name<> is equivalent to the
|
|
||||||
// more commonly needed template_name1<> form.
|
|
||||||
# define BOOST_OPERATOR_TEMPLATE(template_name) \
|
|
||||||
template <class T, class B = ::boost::detail::empty_base<T> > \
|
|
||||||
struct template_name : template_name##1<T, B> {};
|
|
||||||
|
|
||||||
#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
|
|
||||||
|
|
||||||
namespace boost {
|
namespace boost {
|
||||||
|
|
||||||
@ -890,14 +871,10 @@ struct operators2
|
|||||||
, bitwise2<T,U
|
, bitwise2<T,U
|
||||||
> > > {};
|
> > > {};
|
||||||
|
|
||||||
#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
|
|
||||||
template <class T, class U = T>
|
template <class T, class U = T>
|
||||||
struct operators : operators2<T, U> {};
|
struct operators : operators2<T, U> {};
|
||||||
|
|
||||||
template <class T> struct operators<T, T>
|
template <class T> struct operators<T, T>
|
||||||
#else
|
|
||||||
template <class T> struct operators
|
|
||||||
#endif
|
|
||||||
: totally_ordered<T
|
: totally_ordered<T
|
||||||
, integer_arithmetic<T
|
, integer_arithmetic<T
|
||||||
, bitwise<T
|
, bitwise<T
|
||||||
|
@ -73,7 +73,6 @@ template<class T> BOOST_FORCEINLINE reference_wrapper<T const> BOOST_REF_CONST
|
|||||||
|
|
||||||
# undef BOOST_REF_CONST
|
# undef BOOST_REF_CONST
|
||||||
|
|
||||||
# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
|
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
class is_reference_wrapper
|
class is_reference_wrapper
|
||||||
@ -112,66 +111,6 @@ AUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF(reference_wrapper<T> const volatile)
|
|||||||
|
|
||||||
# undef AUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF
|
# undef AUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF
|
||||||
|
|
||||||
# else // no partial specialization
|
|
||||||
|
|
||||||
} // namespace boost
|
|
||||||
|
|
||||||
#include <boost/type.hpp>
|
|
||||||
|
|
||||||
namespace boost
|
|
||||||
{
|
|
||||||
|
|
||||||
namespace detail
|
|
||||||
{
|
|
||||||
typedef char (&yes_reference_wrapper_t)[1];
|
|
||||||
typedef char (&no_reference_wrapper_t)[2];
|
|
||||||
|
|
||||||
no_reference_wrapper_t is_reference_wrapper_test(...);
|
|
||||||
|
|
||||||
template<typename T>
|
|
||||||
yes_reference_wrapper_t is_reference_wrapper_test(type< reference_wrapper<T> >);
|
|
||||||
|
|
||||||
template<bool wrapped>
|
|
||||||
struct reference_unwrapper
|
|
||||||
{
|
|
||||||
template <class T>
|
|
||||||
struct apply
|
|
||||||
{
|
|
||||||
typedef T type;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
template<>
|
|
||||||
struct reference_unwrapper<true>
|
|
||||||
{
|
|
||||||
template <class T>
|
|
||||||
struct apply
|
|
||||||
{
|
|
||||||
typedef typename T::type type;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename T>
|
|
||||||
class is_reference_wrapper
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
BOOST_STATIC_CONSTANT(
|
|
||||||
bool, value = (
|
|
||||||
sizeof(detail::is_reference_wrapper_test(type<T>()))
|
|
||||||
== sizeof(detail::yes_reference_wrapper_t)));
|
|
||||||
|
|
||||||
typedef ::boost::mpl::bool_<value> type;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
class unwrap_reference
|
|
||||||
: public detail::reference_unwrapper<
|
|
||||||
is_reference_wrapper<T>::value
|
|
||||||
>::template apply<T>
|
|
||||||
{};
|
|
||||||
|
|
||||||
# endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
|
|
||||||
|
|
||||||
template <class T> BOOST_FORCEINLINE typename unwrap_reference<T>::type&
|
template <class T> BOOST_FORCEINLINE typename unwrap_reference<T>::type&
|
||||||
unwrap_ref(T& t)
|
unwrap_ref(T& t)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user