mirror of
https://github.com/boostorg/functional.git
synced 2025-07-31 21:14:30 +02:00
Remove BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
Process #ifndef...#else...#endif blocks. [SVN r86245]
This commit is contained in:
@@ -18,7 +18,6 @@
|
|||||||
|
|
||||||
namespace boost
|
namespace boost
|
||||||
{
|
{
|
||||||
#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
// The following traits classes allow us to avoid the need for ptr_fun
|
// The following traits classes allow us to avoid the need for ptr_fun
|
||||||
// because the types of arguments and the result of a function can be
|
// because the types of arguments and the result of a function can be
|
||||||
@@ -116,31 +115,6 @@ namespace boost
|
|||||||
typedef A1 first_argument_type;
|
typedef A1 first_argument_type;
|
||||||
typedef A2 second_argument_type;
|
typedef A2 second_argument_type;
|
||||||
};
|
};
|
||||||
#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
|
|
||||||
// --------------------------------------------------------------------------
|
|
||||||
// If we have no partial specialisation available, decay to a situation
|
|
||||||
// that is no worse than in the Standard, i.e., ptr_fun will be required.
|
|
||||||
// --------------------------------------------------------------------------
|
|
||||||
|
|
||||||
template <class Operation>
|
|
||||||
struct unary_traits
|
|
||||||
{
|
|
||||||
typedef Operation function_type;
|
|
||||||
typedef const Operation& param_type;
|
|
||||||
typedef typename Operation::result_type result_type;
|
|
||||||
typedef typename Operation::argument_type argument_type;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <class Operation>
|
|
||||||
struct binary_traits
|
|
||||||
{
|
|
||||||
typedef Operation function_type;
|
|
||||||
typedef const Operation & param_type;
|
|
||||||
typedef typename Operation::result_type result_type;
|
|
||||||
typedef typename Operation::first_argument_type first_argument_type;
|
|
||||||
typedef typename Operation::second_argument_type second_argument_type;
|
|
||||||
};
|
|
||||||
#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
// unary_negate, not1
|
// unary_negate, not1
|
||||||
|
@@ -250,7 +250,6 @@ namespace boost
|
|||||||
//
|
//
|
||||||
|
|
||||||
|
|
||||||
#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
|
|
||||||
|
|
||||||
template <class T> struct hash
|
template <class T> struct hash
|
||||||
: std::unary_function<T, std::size_t>
|
: std::unary_function<T, std::size_t>
|
||||||
@@ -279,39 +278,6 @@ namespace boost
|
|||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
|
|
||||||
|
|
||||||
// On compilers without partial specialization, boost::hash<T>
|
|
||||||
// has already been declared to deal with pointers, so just
|
|
||||||
// need to supply the non-pointer version of hash_impl.
|
|
||||||
|
|
||||||
namespace hash_detail
|
|
||||||
{
|
|
||||||
template <bool IsPointer>
|
|
||||||
struct hash_impl;
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct hash_impl<false>
|
|
||||||
{
|
|
||||||
template <class T>
|
|
||||||
struct inner
|
|
||||||
: std::unary_function<T, std::size_t>
|
|
||||||
{
|
|
||||||
#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
|
|
||||||
std::size_t operator()(T const& val) const
|
|
||||||
{
|
|
||||||
return hash_value(val);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
std::size_t operator()(T const& val) const
|
|
||||||
{
|
|
||||||
return hash_detail::call_hash<T>::call(val);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -405,7 +405,6 @@ namespace boost
|
|||||||
|
|
||||||
// Specializing boost::hash for pointers.
|
// Specializing boost::hash for pointers.
|
||||||
|
|
||||||
#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
|
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
struct hash<T*>
|
struct hash<T*>
|
||||||
@@ -424,48 +423,6 @@ namespace boost
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
// For compilers without partial specialization, we define a
|
|
||||||
// boost::hash for all remaining types. But hash_impl is only defined
|
|
||||||
// for pointers in 'extensions.hpp' - so when BOOST_HASH_NO_EXTENSIONS
|
|
||||||
// is defined there will still be a compile error for types not supported
|
|
||||||
// in the standard.
|
|
||||||
|
|
||||||
namespace hash_detail
|
|
||||||
{
|
|
||||||
template <bool IsPointer>
|
|
||||||
struct hash_impl;
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct hash_impl<true>
|
|
||||||
{
|
|
||||||
template <class T>
|
|
||||||
struct inner
|
|
||||||
: public std::unary_function<T, std::size_t>
|
|
||||||
{
|
|
||||||
std::size_t operator()(T val) const
|
|
||||||
{
|
|
||||||
#if !BOOST_WORKAROUND(__SUNPRO_CC, <= 590)
|
|
||||||
return boost::hash_value(val);
|
|
||||||
#else
|
|
||||||
std::size_t x = static_cast<std::size_t>(
|
|
||||||
reinterpret_cast<std::ptrdiff_t>(val));
|
|
||||||
|
|
||||||
return x + (x >> 3);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
template <class T> struct hash
|
|
||||||
: public boost::hash_detail::hash_impl<boost::is_pointer<T>::value>
|
|
||||||
::BOOST_NESTED_TEMPLATE inner<T>
|
|
||||||
{
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(BOOST_MSVC)
|
#if defined(BOOST_MSVC)
|
||||||
|
Reference in New Issue
Block a user