// Copyright (C) 2017-2019 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the // terms of the GNU General Public License as published by the // Free Software Foundation; either version 3, or (at your option) // any later version. // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License along // with this library; see the file COPYING3. If not see // . // { dg-do compile { target c++11 } } #include using std::is_same; template using Rebind = typename std::pointer_traits::template rebind; template struct HasRebind { template using rebind = U*; }; static_assert(is_same, long>, long*>::value, "nested alias template is used"); template struct NoRebind0 { }; static_assert(is_same, long>, NoRebind0>::value, "first template argument is replaced"); template struct NoRebind1 { }; static_assert(is_same, long>, NoRebind1>::value, "first template argument is replaced"); template struct NoRebind2 { }; static_assert(is_same, long>, NoRebind2>::value, "first template argument is replaced"); template struct NoRebindN { }; static_assert(is_same, long>, NoRebindN>::value, "first template argument is replaced"); static_assert(is_same, long>, NoRebindN>::value, "first template argument is replaced"); template struct CannotRebind { using element_type = T; }; // PR libstdc++/72793 specialization of pointer_traits is still well-formed: std::pointer_traits>::element_type e;