1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
|
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2011-2013. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#include <boost/container/uses_allocator_fwd.hpp>
#include <boost/container/uses_allocator.hpp>
#include "propagation_test_allocator.hpp"
struct not_uses_allocator
{};
struct uses_allocator_and_not_convertible_to_int
{
typedef uses_allocator_and_not_convertible_to_int allocator_type;
};
struct uses_allocator_and_convertible_to_int
{
typedef char allocator_type;
};
struct uses_erased_type_allocator
{
typedef boost::container::erased_type allocator_type;
};
int main()
{
using namespace boost::container;
//Using dummy classes
BOOST_STATIC_ASSERT(( false == uses_allocator
< not_uses_allocator, int>::value ));
BOOST_STATIC_ASSERT(( false == uses_allocator
< uses_allocator_and_not_convertible_to_int, int>::value ));
BOOST_STATIC_ASSERT(( true == uses_allocator
< uses_allocator_and_convertible_to_int, int>::value ));
BOOST_STATIC_ASSERT(( true == uses_allocator
< uses_erased_type_allocator, int>::value ));
//Using an allocator-like class
BOOST_STATIC_ASSERT(( false == uses_allocator
< allocator_argument_tester<NotUsesAllocator, 0>
, propagation_test_allocator<float, 0>
>::value ));
BOOST_STATIC_ASSERT(( true == uses_allocator
< allocator_argument_tester<ConstructiblePrefix, 0>
, propagation_test_allocator<float, 0>
>::value ));
BOOST_STATIC_ASSERT(( true == uses_allocator
< allocator_argument_tester<ConstructibleSuffix, 0>
, propagation_test_allocator<float, 0>
>::value ));
BOOST_STATIC_ASSERT(( true == uses_allocator
< allocator_argument_tester<ErasedTypeSuffix, 0>
, propagation_test_allocator<float, 0>
>::value ));
BOOST_STATIC_ASSERT(( true == uses_allocator
< allocator_argument_tester<ErasedTypePrefix, 0>
, propagation_test_allocator<float, 0>
>::value ));
BOOST_STATIC_ASSERT(( true == constructible_with_allocator_prefix
< allocator_argument_tester<ConstructiblePrefix, 0> >::value ));
BOOST_STATIC_ASSERT(( true == constructible_with_allocator_suffix
< allocator_argument_tester<ConstructibleSuffix, 0> >::value ));
BOOST_STATIC_ASSERT(( true == constructible_with_allocator_prefix
< allocator_argument_tester<ErasedTypePrefix, 0> >::value ));
BOOST_STATIC_ASSERT(( true == constructible_with_allocator_suffix
< allocator_argument_tester<ErasedTypeSuffix, 0> >::value ));
return 0;
}
|