//===----------------------------------------------------------------------===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <memory>
// template <class Alloc>
// struct allocator_traits
// {
// template <class T> using rebind_traits = allocator_traits<rebind_alloc<T>>;
// ...
// };
#include<memory>#include<type_traits>template<classT>structReboundA{};template<classT>structA{typedefTvalue_type;template<classU>structrebind{typedefReboundA<U>other;};};template<classT,classU>structReboundB{};template<classT,classU>structB{typedefTvalue_type;template<classV>structrebind{typedefReboundB<V,U>other;};};template<classT>structC{typedefTvalue_type;};template<classT,classU>structD{typedefTvalue_type;};template<classT>structE{typedefTvalue_type;template<classU>structrebind{typedefReboundA<U>otter;};};intmain(){#ifndef _LIBCPP_HAS_NO_TEMPLATE_ALIASESstatic_assert((std::is_same<std::allocator_traits<A<char>>::rebind_traits<double>,std::allocator_traits<ReboundA<double>>>::value),"");static_assert((std::is_same<std::allocator_traits<B<int,char>>::rebind_traits<double>,std::allocator_traits<ReboundB<double,char>>>::value),"");static_assert((std::is_same<std::allocator_traits<C<char>>::rebind_traits<double>,std::allocator_traits<C<double>>>::value),"");static_assert((std::is_same<std::allocator_traits<D<int,char>>::rebind_traits<double>,std::allocator_traits<D<double,char>>>::value),"");static_assert((std::is_same<std::allocator_traits<E<char>>::rebind_traits<double>,std::allocator_traits<E<double>>>::value),"");#elsestatic_assert((std::is_same<std::allocator_traits<A<char>>::rebind_traits<double>::other,std::allocator_traits<ReboundA<double>>>::value),"");static_assert((std::is_same<std::allocator_traits<B<int,char>>::rebind_traits<double>::other,std::allocator_traits<ReboundB<double,char>>>::value),"");static_assert((std::is_same<std::allocator_traits<C<char>>::rebind_traits<double>::other,std::allocator_traits<C<double>>>::value),"");static_assert((std::is_same<std::allocator_traits<D<int,char>>::rebind_traits<double>::other,std::allocator_traits<D<double,char>>>::value),"");static_assert((std::is_same<std::allocator_traits<E<char>>::rebind_traits<double>::other,std::allocator_traits<E<double>>>::value),"");#endif}