forked from boostorg/container
Added C++17's is_always_equal to allocator_traits and scoped_allocator_adaptor
This commit is contained in:
@@ -21,7 +21,7 @@
|
||||
|
||||
using namespace boost::container;
|
||||
|
||||
template<class T, unsigned int Id, bool Propagate = false>
|
||||
template<class T, unsigned int Id, bool HasTrueTypes = false>
|
||||
class test_allocator
|
||||
{
|
||||
BOOST_COPYABLE_AND_MOVABLE(test_allocator)
|
||||
@@ -30,12 +30,13 @@ class test_allocator
|
||||
template<class U>
|
||||
struct rebind
|
||||
{
|
||||
typedef test_allocator<U, Id, Propagate> other;
|
||||
typedef test_allocator<U, Id, HasTrueTypes> other;
|
||||
};
|
||||
|
||||
typedef container_detail::bool_<Propagate> propagate_on_container_copy_assignment;
|
||||
typedef container_detail::bool_<Propagate> propagate_on_container_move_assignment;
|
||||
typedef container_detail::bool_<Propagate> propagate_on_container_swap;
|
||||
typedef container_detail::bool_<HasTrueTypes> propagate_on_container_copy_assignment;
|
||||
typedef container_detail::bool_<HasTrueTypes> propagate_on_container_move_assignment;
|
||||
typedef container_detail::bool_<HasTrueTypes> propagate_on_container_swap;
|
||||
typedef container_detail::bool_<HasTrueTypes> is_always_equal;
|
||||
typedef T value_type;
|
||||
|
||||
test_allocator()
|
||||
@@ -51,12 +52,12 @@ class test_allocator
|
||||
{}
|
||||
|
||||
template<class U>
|
||||
test_allocator(BOOST_RV_REF_BEG test_allocator<U, Id, Propagate> BOOST_RV_REF_END)
|
||||
test_allocator(BOOST_RV_REF_BEG test_allocator<U, Id, HasTrueTypes> BOOST_RV_REF_END)
|
||||
: m_move_contructed(true), m_move_assigned(false)
|
||||
{}
|
||||
|
||||
template<class U>
|
||||
test_allocator(const test_allocator<U, Id, Propagate> &)
|
||||
test_allocator(const test_allocator<U, Id, HasTrueTypes> &)
|
||||
{}
|
||||
|
||||
test_allocator & operator=(BOOST_COPY_ASSIGN_REF(test_allocator))
|
||||
@@ -83,14 +84,14 @@ class test_allocator
|
||||
bool m_move_assigned;
|
||||
};
|
||||
|
||||
template <class T1, class T2, unsigned int Id, bool Propagate>
|
||||
bool operator==( const test_allocator<T1, Id, Propagate>&
|
||||
, const test_allocator<T2, Id, Propagate>&)
|
||||
template <class T1, class T2, unsigned int Id, bool HasTrueTypes>
|
||||
bool operator==( const test_allocator<T1, Id, HasTrueTypes>&
|
||||
, const test_allocator<T2, Id, HasTrueTypes>&)
|
||||
{ return true; }
|
||||
|
||||
template <class T1, class T2, unsigned int Id, bool Propagate>
|
||||
bool operator!=( const test_allocator<T1, Id, Propagate>&
|
||||
, const test_allocator<T2, Id, Propagate>&)
|
||||
template <class T1, class T2, unsigned int Id, bool HasTrueTypes>
|
||||
bool operator!=( const test_allocator<T1, Id, HasTrueTypes>&
|
||||
, const test_allocator<T2, Id, HasTrueTypes>&)
|
||||
{ return false; }
|
||||
|
||||
|
||||
@@ -269,12 +270,12 @@ int main()
|
||||
typedef test_allocator<tagged_integer<2>, 2> InnerAlloc2;
|
||||
typedef test_allocator<tagged_integer<1>, 11> Inner11IdAlloc1;
|
||||
|
||||
typedef test_allocator<tagged_integer<0>, 0, false> OuterAllocFalsePropagate;
|
||||
typedef test_allocator<tagged_integer<0>, 0, true> OuterAllocTruePropagate;
|
||||
typedef test_allocator<tagged_integer<1>, 1, false> InnerAlloc1FalsePropagate;
|
||||
typedef test_allocator<tagged_integer<1>, 1, true> InnerAlloc1TruePropagate;
|
||||
typedef test_allocator<tagged_integer<2>, 2, false> InnerAlloc2FalsePropagate;
|
||||
typedef test_allocator<tagged_integer<2>, 2, true> InnerAlloc2TruePropagate;
|
||||
typedef test_allocator<tagged_integer<0>, 0, false> OuterAllocFalseHasTrueTypes;
|
||||
typedef test_allocator<tagged_integer<0>, 0, true> OuterAllocTrueHasTrueTypes;
|
||||
typedef test_allocator<tagged_integer<1>, 1, false> InnerAlloc1FalseHasTrueTypes;
|
||||
typedef test_allocator<tagged_integer<1>, 1, true> InnerAlloc1TrueHasTrueTypes;
|
||||
typedef test_allocator<tagged_integer<2>, 2, false> InnerAlloc2FalseHasTrueTypes;
|
||||
typedef test_allocator<tagged_integer<2>, 2, true> InnerAlloc2TrueHasTrueTypes;
|
||||
|
||||
//
|
||||
typedef scoped_allocator_adaptor< OuterAlloc > Scoped0Inner;
|
||||
@@ -379,40 +380,40 @@ int main()
|
||||
|
||||
{
|
||||
//Propagation test
|
||||
typedef scoped_allocator_adaptor< OuterAllocFalsePropagate > Scoped0InnerF;
|
||||
typedef scoped_allocator_adaptor< OuterAllocTruePropagate > Scoped0InnerT;
|
||||
typedef scoped_allocator_adaptor< OuterAllocFalsePropagate
|
||||
, InnerAlloc1FalsePropagate > Scoped1InnerFF;
|
||||
typedef scoped_allocator_adaptor< OuterAllocFalsePropagate
|
||||
, InnerAlloc1TruePropagate > Scoped1InnerFT;
|
||||
typedef scoped_allocator_adaptor< OuterAllocTruePropagate
|
||||
, InnerAlloc1FalsePropagate > Scoped1InnerTF;
|
||||
typedef scoped_allocator_adaptor< OuterAllocTruePropagate
|
||||
, InnerAlloc1TruePropagate > Scoped1InnerTT;
|
||||
typedef scoped_allocator_adaptor< OuterAllocFalsePropagate
|
||||
, InnerAlloc1FalsePropagate
|
||||
, InnerAlloc2FalsePropagate > Scoped2InnerFFF;
|
||||
typedef scoped_allocator_adaptor< OuterAllocFalsePropagate
|
||||
, InnerAlloc1FalsePropagate
|
||||
, InnerAlloc2TruePropagate > Scoped2InnerFFT;
|
||||
typedef scoped_allocator_adaptor< OuterAllocFalsePropagate
|
||||
, InnerAlloc1TruePropagate
|
||||
, InnerAlloc2FalsePropagate > Scoped2InnerFTF;
|
||||
typedef scoped_allocator_adaptor< OuterAllocFalsePropagate
|
||||
, InnerAlloc1TruePropagate
|
||||
, InnerAlloc2TruePropagate > Scoped2InnerFTT;
|
||||
typedef scoped_allocator_adaptor< OuterAllocTruePropagate
|
||||
, InnerAlloc1FalsePropagate
|
||||
, InnerAlloc2FalsePropagate > Scoped2InnerTFF;
|
||||
typedef scoped_allocator_adaptor< OuterAllocTruePropagate
|
||||
, InnerAlloc1FalsePropagate
|
||||
, InnerAlloc2TruePropagate > Scoped2InnerTFT;
|
||||
typedef scoped_allocator_adaptor< OuterAllocTruePropagate
|
||||
, InnerAlloc1TruePropagate
|
||||
, InnerAlloc2FalsePropagate > Scoped2InnerTTF;
|
||||
typedef scoped_allocator_adaptor< OuterAllocTruePropagate
|
||||
, InnerAlloc1TruePropagate
|
||||
, InnerAlloc2TruePropagate > Scoped2InnerTTT;
|
||||
typedef scoped_allocator_adaptor< OuterAllocFalseHasTrueTypes > Scoped0InnerF;
|
||||
typedef scoped_allocator_adaptor< OuterAllocTrueHasTrueTypes > Scoped0InnerT;
|
||||
typedef scoped_allocator_adaptor< OuterAllocFalseHasTrueTypes
|
||||
, InnerAlloc1FalseHasTrueTypes > Scoped1InnerFF;
|
||||
typedef scoped_allocator_adaptor< OuterAllocFalseHasTrueTypes
|
||||
, InnerAlloc1TrueHasTrueTypes > Scoped1InnerFT;
|
||||
typedef scoped_allocator_adaptor< OuterAllocTrueHasTrueTypes
|
||||
, InnerAlloc1FalseHasTrueTypes > Scoped1InnerTF;
|
||||
typedef scoped_allocator_adaptor< OuterAllocTrueHasTrueTypes
|
||||
, InnerAlloc1TrueHasTrueTypes > Scoped1InnerTT;
|
||||
typedef scoped_allocator_adaptor< OuterAllocFalseHasTrueTypes
|
||||
, InnerAlloc1FalseHasTrueTypes
|
||||
, InnerAlloc2FalseHasTrueTypes > Scoped2InnerFFF;
|
||||
typedef scoped_allocator_adaptor< OuterAllocFalseHasTrueTypes
|
||||
, InnerAlloc1FalseHasTrueTypes
|
||||
, InnerAlloc2TrueHasTrueTypes > Scoped2InnerFFT;
|
||||
typedef scoped_allocator_adaptor< OuterAllocFalseHasTrueTypes
|
||||
, InnerAlloc1TrueHasTrueTypes
|
||||
, InnerAlloc2FalseHasTrueTypes > Scoped2InnerFTF;
|
||||
typedef scoped_allocator_adaptor< OuterAllocFalseHasTrueTypes
|
||||
, InnerAlloc1TrueHasTrueTypes
|
||||
, InnerAlloc2TrueHasTrueTypes > Scoped2InnerFTT;
|
||||
typedef scoped_allocator_adaptor< OuterAllocTrueHasTrueTypes
|
||||
, InnerAlloc1FalseHasTrueTypes
|
||||
, InnerAlloc2FalseHasTrueTypes > Scoped2InnerTFF;
|
||||
typedef scoped_allocator_adaptor< OuterAllocTrueHasTrueTypes
|
||||
, InnerAlloc1FalseHasTrueTypes
|
||||
, InnerAlloc2TrueHasTrueTypes > Scoped2InnerTFT;
|
||||
typedef scoped_allocator_adaptor< OuterAllocTrueHasTrueTypes
|
||||
, InnerAlloc1TrueHasTrueTypes
|
||||
, InnerAlloc2FalseHasTrueTypes > Scoped2InnerTTF;
|
||||
typedef scoped_allocator_adaptor< OuterAllocTrueHasTrueTypes
|
||||
, InnerAlloc1TrueHasTrueTypes
|
||||
, InnerAlloc2TrueHasTrueTypes > Scoped2InnerTTT;
|
||||
|
||||
//propagate_on_container_copy_assignment
|
||||
//0 inner
|
||||
@@ -470,6 +471,24 @@ int main()
|
||||
BOOST_STATIC_ASSERT(( Scoped2InnerTFT::propagate_on_container_swap::value ));
|
||||
BOOST_STATIC_ASSERT(( Scoped2InnerTTF::propagate_on_container_swap::value ));
|
||||
BOOST_STATIC_ASSERT(( Scoped2InnerTTT::propagate_on_container_swap::value ));
|
||||
//is_always_equal
|
||||
//0 inner
|
||||
BOOST_STATIC_ASSERT(( !Scoped0InnerF::is_always_equal::value ));
|
||||
BOOST_STATIC_ASSERT(( Scoped0InnerT::is_always_equal::value ));
|
||||
//1 inner
|
||||
BOOST_STATIC_ASSERT(( !Scoped1InnerFF::is_always_equal::value ));
|
||||
BOOST_STATIC_ASSERT(( !Scoped1InnerFT::is_always_equal::value ));
|
||||
BOOST_STATIC_ASSERT(( !Scoped1InnerTF::is_always_equal::value ));
|
||||
BOOST_STATIC_ASSERT(( Scoped1InnerTT::is_always_equal::value ));
|
||||
//2 inner
|
||||
BOOST_STATIC_ASSERT(( !Scoped2InnerFFF::is_always_equal::value ));
|
||||
BOOST_STATIC_ASSERT(( !Scoped2InnerFFT::is_always_equal::value ));
|
||||
BOOST_STATIC_ASSERT(( !Scoped2InnerFTF::is_always_equal::value ));
|
||||
BOOST_STATIC_ASSERT(( !Scoped2InnerFTT::is_always_equal::value ));
|
||||
BOOST_STATIC_ASSERT(( !Scoped2InnerTFF::is_always_equal::value ));
|
||||
BOOST_STATIC_ASSERT(( !Scoped2InnerTFT::is_always_equal::value ));
|
||||
BOOST_STATIC_ASSERT(( !Scoped2InnerTTF::is_always_equal::value ));
|
||||
BOOST_STATIC_ASSERT(( Scoped2InnerTTT::is_always_equal::value ));
|
||||
}
|
||||
|
||||
//Default constructor
|
||||
|
||||
Reference in New Issue
Block a user