//===----------------------------------------------------------------------===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <memory>
// template <class Ptr>
// struct pointer_traits
// {
// static pointer pointer_to(<details>);
// ...
// };
#include<memory>#include<cassert>template<classT>structA{private:structnat{};public:typedefTelement_type;element_type*t_;A(element_type*t):t_(t){}staticApointer_to(typenamestd::conditional<std::is_void<element_type>::value,nat,element_type>::type&et){returnA(&et);}};intmain(){{inti=0;A<int>a=std::pointer_traits<A<int>>::pointer_to(i);assert(a.t_=&i);}{(std::pointer_traits<A<void>>::element_type)0;}}