mirror of
https://github.com/boostorg/unordered.git
synced 2025-07-31 20:04:29 +02:00
Unordered: Merge to release. Fixes #6522.
Fixes undefined macros, removes some unused code and fix some potential issues for when `std::allocator_traits` is used. [SVN r76943]
This commit is contained in:
@@ -26,6 +26,10 @@
|
|||||||
#include <boost/assert.hpp>
|
#include <boost/assert.hpp>
|
||||||
#include <boost/utility/addressof.hpp>
|
#include <boost/utility/addressof.hpp>
|
||||||
|
|
||||||
|
#if !defined(BOOST_UNORDERED_USE_ALLOCATOR_TRAITS)
|
||||||
|
#define BOOST_UNORDERED_USE_ALLOCATOR_TRAITS 0
|
||||||
|
#endif
|
||||||
|
|
||||||
#if BOOST_UNORDERED_USE_ALLOCATOR_TRAITS
|
#if BOOST_UNORDERED_USE_ALLOCATOR_TRAITS
|
||||||
# include <memory>
|
# include <memory>
|
||||||
#endif
|
#endif
|
||||||
@@ -198,7 +202,8 @@ namespace boost { namespace unordered { namespace detail {
|
|||||||
template <typename Alloc, typename T>
|
template <typename Alloc, typename T>
|
||||||
struct rebind_wrap
|
struct rebind_wrap
|
||||||
{
|
{
|
||||||
typedef typename std::allocator_traits<Alloc>::rebind_alloc<T> type;
|
typedef typename std::allocator_traits<Alloc>::
|
||||||
|
template rebind_alloc<T> type;
|
||||||
};
|
};
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
@@ -51,13 +51,6 @@ namespace detail {
|
|||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if BOOST_UNORDERED_USE_RV_REF
|
|
||||||
static key_type const& extract(BOOST_RV_REF(key_type) v)
|
|
||||||
{
|
|
||||||
return v;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static no_key extract()
|
static no_key extract()
|
||||||
{
|
{
|
||||||
return no_key();
|
return no_key();
|
||||||
@@ -69,7 +62,6 @@ namespace detail {
|
|||||||
{
|
{
|
||||||
return no_key();
|
return no_key();
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
template <class Arg>
|
template <class Arg>
|
||||||
static no_key extract(Arg const&)
|
static no_key extract(Arg const&)
|
||||||
@@ -106,13 +98,6 @@ namespace detail {
|
|||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Why does this cause errors?
|
|
||||||
//
|
|
||||||
//static key_type const& extract(BOOST_RV_REF(key_type) v)
|
|
||||||
//{
|
|
||||||
// return v;
|
|
||||||
//}
|
|
||||||
|
|
||||||
template <class Second>
|
template <class Second>
|
||||||
static key_type const& extract(std::pair<key_type, Second> const& v)
|
static key_type const& extract(std::pair<key_type, Second> const& v)
|
||||||
{
|
{
|
||||||
|
@@ -333,7 +333,7 @@ namespace minimal
|
|||||||
typedef std::size_t size_type;
|
typedef std::size_t size_type;
|
||||||
typedef std::ptrdiff_t difference_type;
|
typedef std::ptrdiff_t difference_type;
|
||||||
typedef void_ptr void_pointer;
|
typedef void_ptr void_pointer;
|
||||||
typedef void_const_ptr void_const_pointer;
|
typedef void_const_ptr const_void_pointer;
|
||||||
typedef ptr<T> pointer;
|
typedef ptr<T> pointer;
|
||||||
typedef const_ptr<T> const_pointer;
|
typedef const_ptr<T> const_pointer;
|
||||||
typedef T& reference;
|
typedef T& reference;
|
||||||
|
@@ -9,6 +9,8 @@ project unordered-test/unordered
|
|||||||
: requirements
|
: requirements
|
||||||
<warnings>all
|
<warnings>all
|
||||||
<toolset>intel:<warnings>on
|
<toolset>intel:<warnings>on
|
||||||
|
# Would be nice to define -Wundef, but I'm getting warnings from
|
||||||
|
# Boost.Preprocessor on trunk.
|
||||||
<toolset>gcc:<cxxflags>"-pedantic -Wstrict-aliasing -fstrict-aliasing -Wextra -Wsign-promo -Wunused-parameter -Wconversion -Wno-long-long"
|
<toolset>gcc:<cxxflags>"-pedantic -Wstrict-aliasing -fstrict-aliasing -Wextra -Wsign-promo -Wunused-parameter -Wconversion -Wno-long-long"
|
||||||
<toolset>darwin:<cxxflags>"-pedantic -Wstrict-aliasing -fstrict-aliasing -Wextra -Wsign-promo -Wunused-parameter -Wconversion"
|
<toolset>darwin:<cxxflags>"-pedantic -Wstrict-aliasing -fstrict-aliasing -Wextra -Wsign-promo -Wunused-parameter -Wconversion"
|
||||||
#<toolset>gcc:<define>_GLIBCXX_DEBUG
|
#<toolset>gcc:<define>_GLIBCXX_DEBUG
|
||||||
|
@@ -90,7 +90,12 @@ void test_empty_allocator()
|
|||||||
{
|
{
|
||||||
typedef empty_allocator<int> allocator;
|
typedef empty_allocator<int> allocator;
|
||||||
typedef boost::unordered::detail::allocator_traits<allocator> traits;
|
typedef boost::unordered::detail::allocator_traits<allocator> traits;
|
||||||
|
#if BOOST_UNORDERED_USE_ALLOCATOR_TRAITS
|
||||||
|
BOOST_MPL_ASSERT((boost::is_same<traits::size_type,
|
||||||
|
std::make_unsigned<std::ptrdiff_t>::type>));
|
||||||
|
#else
|
||||||
BOOST_MPL_ASSERT((boost::is_same<traits::size_type, std::size_t>));
|
BOOST_MPL_ASSERT((boost::is_same<traits::size_type, std::size_t>));
|
||||||
|
#endif
|
||||||
BOOST_MPL_ASSERT((boost::is_same<traits::difference_type, std::ptrdiff_t>));
|
BOOST_MPL_ASSERT((boost::is_same<traits::difference_type, std::ptrdiff_t>));
|
||||||
BOOST_MPL_ASSERT((boost::is_same<traits::pointer, int*>));
|
BOOST_MPL_ASSERT((boost::is_same<traits::pointer, int*>));
|
||||||
BOOST_MPL_ASSERT((boost::is_same<traits::const_pointer, int const*>));
|
BOOST_MPL_ASSERT((boost::is_same<traits::const_pointer, int const*>));
|
||||||
@@ -123,7 +128,12 @@ void test_allocator1()
|
|||||||
{
|
{
|
||||||
typedef allocator1<int> allocator;
|
typedef allocator1<int> allocator;
|
||||||
typedef boost::unordered::detail::allocator_traits<allocator> traits;
|
typedef boost::unordered::detail::allocator_traits<allocator> traits;
|
||||||
|
#if BOOST_UNORDERED_USE_ALLOCATOR_TRAITS
|
||||||
|
BOOST_MPL_ASSERT((boost::is_same<typename traits::size_type,
|
||||||
|
std::make_unsigned<std::ptrdiff_t>::type>));
|
||||||
|
#else
|
||||||
BOOST_MPL_ASSERT((boost::is_same<traits::size_type, std::size_t>));
|
BOOST_MPL_ASSERT((boost::is_same<traits::size_type, std::size_t>));
|
||||||
|
#endif
|
||||||
BOOST_MPL_ASSERT((boost::is_same<traits::difference_type, std::ptrdiff_t>));
|
BOOST_MPL_ASSERT((boost::is_same<traits::difference_type, std::ptrdiff_t>));
|
||||||
BOOST_MPL_ASSERT((boost::is_same<traits::pointer, int*>));
|
BOOST_MPL_ASSERT((boost::is_same<traits::pointer, int*>));
|
||||||
BOOST_MPL_ASSERT((boost::is_same<traits::const_pointer, int const*>));
|
BOOST_MPL_ASSERT((boost::is_same<traits::const_pointer, int const*>));
|
||||||
@@ -186,6 +196,20 @@ struct ptr
|
|||||||
T& operator*() const { return *value_; }
|
T& operator*() const { return *value_; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct ptr<void>
|
||||||
|
{
|
||||||
|
void* value_;
|
||||||
|
ptr(void* v) : value_(v) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct ptr<const void>
|
||||||
|
{
|
||||||
|
void const* value_;
|
||||||
|
ptr(void const* v) : value_(v) {}
|
||||||
|
};
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct allocator3
|
struct allocator3
|
||||||
{
|
{
|
||||||
|
@@ -22,6 +22,7 @@
|
|||||||
#include <boost/type_traits/is_convertible.hpp>
|
#include <boost/type_traits/is_convertible.hpp>
|
||||||
#include <boost/iterator/iterator_traits.hpp>
|
#include <boost/iterator/iterator_traits.hpp>
|
||||||
#include <boost/limits.hpp>
|
#include <boost/limits.hpp>
|
||||||
|
#include <boost/utility/swap.hpp>
|
||||||
#include "../helpers/check_return_type.hpp"
|
#include "../helpers/check_return_type.hpp"
|
||||||
|
|
||||||
typedef long double comparison_type;
|
typedef long double comparison_type;
|
||||||
|
@@ -51,7 +51,13 @@ void test_simple_allocator()
|
|||||||
//BOOST_MPL_ASSERT((boost::is_same<typename traits::const_void_pointer, void const*>));
|
//BOOST_MPL_ASSERT((boost::is_same<typename traits::const_void_pointer, void const*>));
|
||||||
|
|
||||||
BOOST_MPL_ASSERT((boost::is_same<typename traits::difference_type, std::ptrdiff_t>));
|
BOOST_MPL_ASSERT((boost::is_same<typename traits::difference_type, std::ptrdiff_t>));
|
||||||
|
|
||||||
|
#if BOOST_UNORDERED_USE_ALLOCATOR_TRAITS
|
||||||
|
BOOST_MPL_ASSERT((boost::is_same<typename traits::size_type,
|
||||||
|
std::make_unsigned<std::ptrdiff_t>::type>));
|
||||||
|
#else
|
||||||
BOOST_MPL_ASSERT((boost::is_same<typename traits::size_type, std::size_t>));
|
BOOST_MPL_ASSERT((boost::is_same<typename traits::size_type, std::size_t>));
|
||||||
|
#endif
|
||||||
|
|
||||||
BOOST_TEST(!traits::propagate_on_container_copy_assignment::value);
|
BOOST_TEST(!traits::propagate_on_container_copy_assignment::value);
|
||||||
BOOST_TEST(!traits::propagate_on_container_move_assignment::value);
|
BOOST_TEST(!traits::propagate_on_container_move_assignment::value);
|
||||||
|
Reference in New Issue
Block a user