void_pointer.pass.cpp revision ee226c05af9e0187098f43fb71465a581487af9b
1c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant//===----------------------------------------------------------------------===// 2c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant// 3c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant// The LLVM Compiler Infrastructure 4c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant// 5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details. 7c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant// 8c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant//===----------------------------------------------------------------------===// 9c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant 10c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant// <memory> 11c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant 12c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant// template <class Alloc> 13c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant// struct allocator_traits 14c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant// { 15c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant// typedef Alloc::void_pointer 16c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant// | pointer_traits<pointer>::rebind<void> 17c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant// void_pointer; 18c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant// ... 19c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant// }; 20c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant 21c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant#include <memory> 22c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant#include <type_traits> 23ee226c05af9e0187098f43fb71465a581487af9bDan Austin#include "test_macros.h" 24c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant 25c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnanttemplate <class T> 26c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnantstruct Ptr {}; 27c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant 28c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnanttemplate <class T> 29c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnantstruct A 30c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant{ 31c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant typedef T value_type; 32c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant typedef Ptr<T> pointer; 33c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant}; 34c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant 35c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnanttemplate <class T> 36c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnantstruct B 37c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant{ 38c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant typedef T value_type; 39c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant}; 40c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant 41c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnanttemplate <class T> 42c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnantstruct CPtr {}; 43c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant 44c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnanttemplate <class T> 45c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnantstruct C 46c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant{ 47c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant typedef T value_type; 48c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant typedef CPtr<void> void_pointer; 49c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant}; 50c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant 51ee226c05af9e0187098f43fb71465a581487af9bDan Austin 52ee226c05af9e0187098f43fb71465a581487af9bDan Austintemplate <class T> 53ee226c05af9e0187098f43fb71465a581487af9bDan Austinstruct D 54ee226c05af9e0187098f43fb71465a581487af9bDan Austin{ 55ee226c05af9e0187098f43fb71465a581487af9bDan Austin typedef T value_type; 56ee226c05af9e0187098f43fb71465a581487af9bDan Austinprivate: 57ee226c05af9e0187098f43fb71465a581487af9bDan Austin typedef void void_pointer; 58ee226c05af9e0187098f43fb71465a581487af9bDan Austin}; 59ee226c05af9e0187098f43fb71465a581487af9bDan Austin 60c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnantint main() 61c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant{ 62c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant static_assert((std::is_same<std::allocator_traits<A<char> >::void_pointer, Ptr<void> >::value), ""); 63c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant static_assert((std::is_same<std::allocator_traits<B<char> >::void_pointer, void*>::value), ""); 64c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant static_assert((std::is_same<std::allocator_traits<C<char> >::void_pointer, CPtr<void> >::value), ""); 65ee226c05af9e0187098f43fb71465a581487af9bDan Austin#if TEST_STD_VER >= 11 66ee226c05af9e0187098f43fb71465a581487af9bDan Austin static_assert((std::is_same<std::allocator_traits<D<char> >::void_pointer, void*>::value), ""); 67ee226c05af9e0187098f43fb71465a581487af9bDan Austin#endif 68c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant} 69