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