allocator_types.pass.cpp revision c52f43e72dfcea03037729649da84c23b3beb04a
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// check nested types: 13 14// template <class T> 15// class allocator 16// { 17// public: 18// typedef size_t size_type; 19// typedef ptrdiff_t difference_type; 20// typedef T* pointer; 21// typedef const T* const_pointer; 22// typedef typename add_lvalue_reference<T>::type reference; 23// typedef typename add_lvalue_reference<const T>::type const_reference; 24// typedef T value_type; 25// 26// template <class U> struct rebind {typedef allocator<U> other;}; 27// ... 28// }; 29 30#include <memory> 31#include <type_traits> 32#include <cstddef> 33 34int main() 35{ 36 static_assert((std::is_same<std::allocator<char>::size_type, std::size_t>::value), ""); 37 static_assert((std::is_same<std::allocator<char>::difference_type, std::ptrdiff_t>::value), ""); 38 static_assert((std::is_same<std::allocator<char>::pointer, char*>::value), ""); 39 static_assert((std::is_same<std::allocator<char>::const_pointer, const char*>::value), ""); 40 static_assert((std::is_same<std::allocator<char>::value_type, char>::value), ""); 41 static_assert((std::is_same<std::allocator<char>::reference, char&>::value), ""); 42 static_assert((std::is_same<std::allocator<char>::const_reference, const char&>::value), ""); 43 static_assert((std::is_same<std::allocator<char>::rebind<int>::other, 44 std::allocator<int> >::value), ""); 45 std::allocator<char> a; 46 std::allocator<char> a2 = a; 47 a2 = a; 48 std::allocator<int> a3 = a2; 49} 50