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