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