forked from boostorg/container_hash
Merge branch 'develop'
This commit is contained in:
@@ -24,6 +24,8 @@ matrix:
|
|||||||
env: BJAM_TOOLSET=clang-std03
|
env: BJAM_TOOLSET=clang-std03
|
||||||
- compiler: clang
|
- compiler: clang
|
||||||
env: BJAM_TOOLSET=clang-std11
|
env: BJAM_TOOLSET=clang-std11
|
||||||
|
- compiler: clang
|
||||||
|
env: BJAM_TOOLSET=clang-pretend_no_auto_ptr_etc
|
||||||
|
|
||||||
before_script:
|
before_script:
|
||||||
- |
|
- |
|
||||||
@@ -31,6 +33,7 @@ before_script:
|
|||||||
echo "using gcc : std11 : g++-4.8 -Werror --std=c++11 ;" >> ~/user-config.jam
|
echo "using gcc : std11 : g++-4.8 -Werror --std=c++11 ;" >> ~/user-config.jam
|
||||||
echo "using clang : std03 : clang++ -Werror --std=c++03 ;" >> ~/user-config.jam
|
echo "using clang : std03 : clang++ -Werror --std=c++03 ;" >> ~/user-config.jam
|
||||||
echo "using clang : std11 : clang++ -Werror --std=c++11 ;" >> ~/user-config.jam
|
echo "using clang : std11 : clang++ -Werror --std=c++11 ;" >> ~/user-config.jam
|
||||||
|
echo "using clang : pretend_no_auto_ptr_etc : clang++ -Werror --std=c++11 -D_HAS_AUTO_PTR_ETC=0 ;" >> ~/user-config.jam
|
||||||
- cat ~/user-config.jam
|
- cat ~/user-config.jam
|
||||||
- touch Jamroot.jam
|
- touch Jamroot.jam
|
||||||
|
|
||||||
|
@@ -254,7 +254,7 @@ namespace boost
|
|||||||
#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
|
#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
|
||||||
|
|
||||||
template <class T> struct hash
|
template <class T> struct hash
|
||||||
: std::unary_function<T, std::size_t>
|
: boost::hash_detail::hash_base<T>
|
||||||
{
|
{
|
||||||
#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
|
#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
|
||||||
std::size_t operator()(T const& val) const
|
std::size_t operator()(T const& val) const
|
||||||
@@ -271,7 +271,7 @@ namespace boost
|
|||||||
|
|
||||||
#if BOOST_WORKAROUND(__DMC__, <= 0x848)
|
#if BOOST_WORKAROUND(__DMC__, <= 0x848)
|
||||||
template <class T, unsigned int n> struct hash<T[n]>
|
template <class T, unsigned int n> struct hash<T[n]>
|
||||||
: std::unary_function<T[n], std::size_t>
|
: boost::hash_detail::hash_base<T[n]>
|
||||||
{
|
{
|
||||||
std::size_t operator()(const T* val) const
|
std::size_t operator()(const T* val) const
|
||||||
{
|
{
|
||||||
@@ -296,7 +296,7 @@ namespace boost
|
|||||||
{
|
{
|
||||||
template <class T>
|
template <class T>
|
||||||
struct inner
|
struct inner
|
||||||
: std::unary_function<T, std::size_t>
|
: boost::hash_detail::hash_base<T>
|
||||||
{
|
{
|
||||||
#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
|
#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
|
||||||
std::size_t operator()(T const& val) const
|
std::size_t operator()(T const& val) const
|
||||||
|
@@ -62,6 +62,18 @@ namespace boost
|
|||||||
{
|
{
|
||||||
namespace hash_detail
|
namespace hash_detail
|
||||||
{
|
{
|
||||||
|
#if defined(_HAS_AUTO_PTR_ETC) && !_HAS_AUTO_PTR_ETC
|
||||||
|
template <typename T>
|
||||||
|
struct hash_base
|
||||||
|
{
|
||||||
|
typedef T argument_type;
|
||||||
|
typedef std::size_t result_type;
|
||||||
|
};
|
||||||
|
#else
|
||||||
|
template <typename T>
|
||||||
|
struct hash_base : std::unary_function<T, std::size_t> {};
|
||||||
|
#endif
|
||||||
|
|
||||||
struct enable_hash_value { typedef std::size_t type; };
|
struct enable_hash_value { typedef std::size_t type; };
|
||||||
|
|
||||||
template <typename T> struct basic_numbers {};
|
template <typename T> struct basic_numbers {};
|
||||||
@@ -419,7 +431,7 @@ namespace boost
|
|||||||
|
|
||||||
#define BOOST_HASH_SPECIALIZE(type) \
|
#define BOOST_HASH_SPECIALIZE(type) \
|
||||||
template <> struct hash<type> \
|
template <> struct hash<type> \
|
||||||
: public std::unary_function<type, std::size_t> \
|
: public boost::hash_detail::hash_base<type> \
|
||||||
{ \
|
{ \
|
||||||
std::size_t operator()(type v) const \
|
std::size_t operator()(type v) const \
|
||||||
{ \
|
{ \
|
||||||
@@ -429,7 +441,7 @@ namespace boost
|
|||||||
|
|
||||||
#define BOOST_HASH_SPECIALIZE_REF(type) \
|
#define BOOST_HASH_SPECIALIZE_REF(type) \
|
||||||
template <> struct hash<type> \
|
template <> struct hash<type> \
|
||||||
: public std::unary_function<type, std::size_t> \
|
: public boost::hash_detail::hash_base<type> \
|
||||||
{ \
|
{ \
|
||||||
std::size_t operator()(type const& v) const \
|
std::size_t operator()(type const& v) const \
|
||||||
{ \
|
{ \
|
||||||
@@ -483,7 +495,7 @@ namespace boost
|
|||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
struct hash<T*>
|
struct hash<T*>
|
||||||
: public std::unary_function<T*, std::size_t>
|
: public boost::hash_detail::hash_base<T*>
|
||||||
{
|
{
|
||||||
std::size_t operator()(T* v) const
|
std::size_t operator()(T* v) const
|
||||||
{
|
{
|
||||||
@@ -516,7 +528,7 @@ namespace boost
|
|||||||
{
|
{
|
||||||
template <class T>
|
template <class T>
|
||||||
struct inner
|
struct inner
|
||||||
: public std::unary_function<T, std::size_t>
|
: public boost::hash_detail::hash_base<T>
|
||||||
{
|
{
|
||||||
std::size_t operator()(T val) const
|
std::size_t operator()(T val) const
|
||||||
{
|
{
|
||||||
|
@@ -10,7 +10,9 @@
|
|||||||
template <class T>
|
template <class T>
|
||||||
void compile_time_tests(T*)
|
void compile_time_tests(T*)
|
||||||
{
|
{
|
||||||
|
#if !defined(_HAS_AUTO_PTR_ETC) || _HAS_AUTO_PTR_ETC
|
||||||
BOOST_STATIC_ASSERT((boost::is_base_and_derived<
|
BOOST_STATIC_ASSERT((boost::is_base_and_derived<
|
||||||
std::unary_function<T, std::size_t>, BOOST_HASH_TEST_NAMESPACE::hash<T> >::value));
|
std::unary_function<T, std::size_t>, BOOST_HASH_TEST_NAMESPACE::hash<T> >::value));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -127,9 +127,13 @@ void poor_quality_tests(T*)
|
|||||||
BOOST_TEST(x1(T(1)) != x2(T(-1)));
|
BOOST_TEST(x1(T(1)) != x2(T(-1)));
|
||||||
if(T(1) != T(2))
|
if(T(1) != T(2))
|
||||||
BOOST_TEST(x1(T(1)) != x2(T(2)));
|
BOOST_TEST(x1(T(1)) != x2(T(2)));
|
||||||
if((limits::max)() != (limits::max)() - 1)
|
|
||||||
BOOST_TEST(x1(static_cast<T>((limits::max)()))
|
// TODO: This test is useless for floating point numbers.
|
||||||
!= x2(static_cast<T>((limits::max)() - 1)));
|
T max_number = static_cast<T>((limits::max)());
|
||||||
|
T max_minus_one = static_cast<T>(max_number - 1);
|
||||||
|
if (max_number != max_minus_one) {
|
||||||
|
BOOST_TEST(x1(max_number) != x1(max_minus_one));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void bool_test()
|
void bool_test()
|
||||||
|
Reference in New Issue
Block a user