max_size.pass.cpp revision f5256e16dfc425c1d466f6308d4026d529ce9e0b
1//===----------------------------------------------------------------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10// <memory>
11
12// template <class Alloc>
13// struct allocator_traits
14// {
15//     static size_type max_size(const allocator_type& a);
16//     ...
17// };
18
19#include <memory>
20#include <new>
21#include <type_traits>
22#include <cassert>
23
24template <class T>
25struct A
26{
27    typedef T value_type;
28
29};
30
31template <class T>
32struct B
33{
34    typedef T value_type;
35
36    size_t max_size() const
37    {
38        return 100;
39    }
40};
41
42int main()
43{
44#ifndef _LIBCPP_HAS_NO_ADVANCED_SFINAE
45    {
46        A<int> a;
47        assert(std::allocator_traits<A<int> >::max_size(a) ==
48               std::numeric_limits<std::size_t>::max());
49    }
50    {
51        const A<int> a = {};
52        assert(std::allocator_traits<A<int> >::max_size(a) ==
53               std::numeric_limits<std::size_t>::max());
54    }
55#endif
56    {
57        B<int> b;
58        assert(std::allocator_traits<B<int> >::max_size(b) == 100);
59    }
60    {
61        const B<int> b = {};
62        assert(std::allocator_traits<B<int> >::max_size(b) == 100);
63    }
64}
65