max_size.pass.cpp revision bc8d3f97eb5c958007f2713238472e0c1c8fe02c
158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)//===----------------------------------------------------------------------===//
258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)//
358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// ��������������������The LLVM Compiler Infrastructure
458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)//
558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// This file is distributed under the University of Illinois Open Source
658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// License. See LICENSE.TXT for details.
758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)//
8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)//===----------------------------------------------------------------------===//
9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// <memory>
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// template <class Alloc>
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// struct allocator_traits
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// {
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)//     static size_type max_size(const allocator_type& a);
16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)//     ...
17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// };
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include <memory>
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include <new>
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include <type_traits>
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include <cassert>
2358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)template <class T>
2558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)struct A
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles){
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    typedef T value_type;
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)};
30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)template <class T>
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)struct B
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles){
34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    typedef T value_type;
35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    size_t max_size() const
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    {
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        return 100;
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    }
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)};
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