cxx/test/utilities/memory/pointer.traits/pointer.traits.functions/pointer_to.pass.cpp

1 line
1.0 KiB
C++
Raw Normal View History

//===----------------------------------------------------------------------===// // // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>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 <class T> struct A { private: struct nat {}; public: typedef T element_type; element_type* t_; A(element_type* t) : t_(t) {} static A pointer_to(typename std::conditional<std::is_void<element_type>::value, nat, element_type>::type& et) {return A(&et);} }; int main() { { int i = 0; A<int> a = std::pointer_traits<A<int> >::pointer_to(i); assert(a.t_ = &i); } { (std::pointer_traits<A<void> >::element_type)0; } }