• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 char allocator_type;
25 };
26 
27 struct uses_erased_type_allocator
28 {
29    typedef boost::container::erased_type allocator_type;
30 };
31 
32 
main()33 int main()
34 {
35    using namespace boost::container;
36    //Using dummy classes
37    BOOST_STATIC_ASSERT(( false == uses_allocator
38                            < not_uses_allocator, int>::value ));
39 
40    BOOST_STATIC_ASSERT(( false == uses_allocator
41                            < uses_allocator_and_not_convertible_to_int, int>::value ));
42 
43    BOOST_STATIC_ASSERT((  true == uses_allocator
44                            < uses_allocator_and_convertible_to_int, int>::value ));
45 
46    BOOST_STATIC_ASSERT((  true == uses_allocator
47                            < uses_erased_type_allocator, int>::value ));
48 
49    //Using an allocator-like class
50    BOOST_STATIC_ASSERT(( false == uses_allocator
51                            < allocator_argument_tester<NotUsesAllocator, 0>
52                            , propagation_test_allocator<float, 0>
53                            >::value ));
54    BOOST_STATIC_ASSERT((  true == uses_allocator
55                            < allocator_argument_tester<ConstructiblePrefix, 0>
56                            , propagation_test_allocator<float, 0>
57                            >::value ));
58    BOOST_STATIC_ASSERT((  true == uses_allocator
59                            < allocator_argument_tester<ConstructibleSuffix, 0>
60                            , propagation_test_allocator<float, 0>
61                            >::value ));
62    BOOST_STATIC_ASSERT((  true == uses_allocator
63                            < allocator_argument_tester<ErasedTypeSuffix, 0>
64                            , propagation_test_allocator<float, 0>
65                            >::value ));
66    BOOST_STATIC_ASSERT((  true == uses_allocator
67                            < allocator_argument_tester<ErasedTypePrefix, 0>
68                            , propagation_test_allocator<float, 0>
69                            >::value ));
70    BOOST_STATIC_ASSERT((  true == constructible_with_allocator_prefix
71                            < allocator_argument_tester<ConstructiblePrefix, 0> >::value ));
72 
73    BOOST_STATIC_ASSERT((  true == constructible_with_allocator_suffix
74                            < allocator_argument_tester<ConstructibleSuffix, 0> >::value ));
75 
76    BOOST_STATIC_ASSERT((  true == constructible_with_allocator_prefix
77                            < allocator_argument_tester<ErasedTypePrefix, 0> >::value ));
78 
79    BOOST_STATIC_ASSERT((  true == constructible_with_allocator_suffix
80                            < allocator_argument_tester<ErasedTypeSuffix, 0> >::value ));
81    return 0;
82 }
83