Viewing file: alloc.C (1.44 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
// { dg-do compile { target c++11 } }
template<typename _Default, typename _AlwaysVoid, template<typename...> class _Op, typename... _Args> struct __detector { using type = _Op<_Args...>; }; template<typename _Default, template<typename...> class _Op, typename... _Args> using __detected_or = __detector<_Default, void, _Op, _Args...>; template<typename _Default, template<typename...> class _Op, typename... _Args> using __detected_or_t = typename __detected_or<_Default, _Op, _Args...>::type; template<typename _Alloc> struct allocator_traits { template<typename _Tp> using __pointer = typename _Tp::pointer; using pointer = __detected_or_t<typename _Alloc::value_type*, __pointer, _Alloc>; }; template<typename _Storage_policy> struct _Pointer_adapter { typedef typename _Storage_policy::element_type element_type; typedef element_type& reference; }; template<typename _Tp> inline _Tp* addressof(_Tp& __r); // { dg-warning "used but never defined" } template<typename _Alloc> struct __allocated_ptr { __allocated_ptr() { using pointer = typename allocator_traits<_Alloc>::pointer; typename _Pointer_adapter<pointer>::reference __r = *(int*)0; addressof(__r); } }; template<typename _Tp> struct _Std_pointer_impl { typedef _Tp element_type; }; template<typename Tp> struct CustomPointerAlloc { typedef Tp value_type; typedef _Pointer_adapter<_Std_pointer_impl<Tp>> pointer; }; __allocated_ptr<CustomPointerAlloc<int>> __guard_ptr;
|