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