From: Jonathan Wakely Date: Wed, 15 Aug 2018 19:46:25 +0000 (+0100) Subject: Fix experimental::pmr typedefs and add tests X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b8eac4d06438eb3dfe3c7d88b4b5b16ee0f9816b;p=gcc.git Fix experimental::pmr typedefs and add tests The typedefs in and don't need to be in the __cxx11 namespace, because they are only aliases and so will have the same mangled name as the underlying types. * include/experimental/regex: Remove begin/end macros for namespace. * include/experimental/string: Likewise. * testsuite/experimental/polymorphic_allocator/pmr_typedefs_deque.cc: New test. * testsuite/experimental/polymorphic_allocator/ pmr_typedefs_forward_list.cc: New test. * testsuite/experimental/polymorphic_allocator/pmr_typedefs_list.cc: New test. * testsuite/experimental/polymorphic_allocator/pmr_typedefs_map.cc: New test. * testsuite/experimental/polymorphic_allocator/pmr_typedefs_match.cc: New test. * testsuite/experimental/polymorphic_allocator/ pmr_typedefs_multimap.cc: New test. * testsuite/experimental/polymorphic_allocator/ pmr_typedefs_multiset.cc: New test. * testsuite/experimental/polymorphic_allocator/pmr_typedefs_set.cc: New test. * testsuite/experimental/polymorphic_allocator/pmr_typedefs_string.cc: New test. * testsuite/experimental/polymorphic_allocator/ pmr_typedefs_unordered_map.cc: New test. * testsuite/experimental/polymorphic_allocator/ pmr_typedefs_unordered_multimap.cc: New test. * testsuite/experimental/polymorphic_allocator/ pmr_typedefs_unordered_multiset.cc: New test. * testsuite/experimental/polymorphic_allocator/ pmr_typedefs_unordered_set.cc: New test. * testsuite/experimental/polymorphic_allocator/pmr_typedefs_vector.cc: New test. From-SVN: r263568 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index f9596aca81f..ce8ccaf621f 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,36 @@ 2018-08-15 Jonathan Wakely + * include/experimental/regex: Remove begin/end macros for namespace. + * include/experimental/string: Likewise. + * testsuite/experimental/polymorphic_allocator/pmr_typedefs_deque.cc: + New test. + * testsuite/experimental/polymorphic_allocator/ + pmr_typedefs_forward_list.cc: New test. + * testsuite/experimental/polymorphic_allocator/pmr_typedefs_list.cc: + New test. + * testsuite/experimental/polymorphic_allocator/pmr_typedefs_map.cc: + New test. + * testsuite/experimental/polymorphic_allocator/pmr_typedefs_match.cc: + New test. + * testsuite/experimental/polymorphic_allocator/ + pmr_typedefs_multimap.cc: New test. + * testsuite/experimental/polymorphic_allocator/ + pmr_typedefs_multiset.cc: New test. + * testsuite/experimental/polymorphic_allocator/pmr_typedefs_set.cc: + New test. + * testsuite/experimental/polymorphic_allocator/pmr_typedefs_string.cc: + New test. + * testsuite/experimental/polymorphic_allocator/ + pmr_typedefs_unordered_map.cc: New test. + * testsuite/experimental/polymorphic_allocator/ + pmr_typedefs_unordered_multimap.cc: New test. + * testsuite/experimental/polymorphic_allocator/ + pmr_typedefs_unordered_multiset.cc: New test. + * testsuite/experimental/polymorphic_allocator/ + pmr_typedefs_unordered_set.cc: New test. + * testsuite/experimental/polymorphic_allocator/pmr_typedefs_vector.cc: + New test. + * include/bits/uses_allocator.h (__uses_allocator_construct): Qualify calls to __uses_allocator_construct_impl and __use_alloc. * include/experimental/memory_resource diff --git a/libstdc++-v3/include/experimental/regex b/libstdc++-v3/include/experimental/regex index 253231f5c65..eb2af151245 100644 --- a/libstdc++-v3/include/experimental/regex +++ b/libstdc++-v3/include/experimental/regex @@ -46,8 +46,6 @@ inline namespace fundamentals_v2 { namespace pmr { -_GLIBCXX_BEGIN_NAMESPACE_CXX11 - template using match_results = std::match_results<_BidirectionalIterator, polymorphic_allocator< @@ -58,7 +56,6 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 typedef match_results smatch; typedef match_results wsmatch; -_GLIBCXX_END_NAMESPACE_CXX11 } // namespace pmr } // namespace fundamentals_v2 diff --git a/libstdc++-v3/include/experimental/string b/libstdc++-v3/include/experimental/string index b340e2bcd94..f101255d641 100644 --- a/libstdc++-v3/include/experimental/string +++ b/libstdc++-v3/include/experimental/string @@ -62,9 +62,8 @@ inline namespace fundamentals_v2 __cont.end()); } - namespace pmr { - _GLIBCXX_BEGIN_NAMESPACE_CXX11 - + namespace pmr + { // basic_string using polymorphic allocator in namespace pmr template> using basic_string = @@ -77,7 +76,6 @@ inline namespace fundamentals_v2 typedef basic_string u32string; typedef basic_string wstring; - _GLIBCXX_END_NAMESPACE_CXX11 } // namespace pmr } // namespace fundamentals_v2 } // namespace experimental diff --git a/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_deque.cc b/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_deque.cc new file mode 100644 index 00000000000..2b475791bfa --- /dev/null +++ b/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_deque.cc @@ -0,0 +1,28 @@ +// Copyright (C) 2018 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++14 } } + +#include + +namespace xpmr = std::experimental::pmr; + +struct X { }; + +static_assert(std::is_same, + std::deque>>::value, + "pmr::deque"); diff --git a/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_forward_list.cc b/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_forward_list.cc new file mode 100644 index 00000000000..ac2dd52dff6 --- /dev/null +++ b/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_forward_list.cc @@ -0,0 +1,28 @@ +// Copyright (C) 2018 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++14 } } + +#include + +namespace xpmr = std::experimental::pmr; + +struct X { }; + +static_assert(std::is_same, + std::forward_list>>::value, + "pmr::forward_list"); diff --git a/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_list.cc b/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_list.cc new file mode 100644 index 00000000000..aea5c8061bd --- /dev/null +++ b/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_list.cc @@ -0,0 +1,28 @@ +// Copyright (C) 2018 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++14 } } + +#include + +namespace xpmr = std::experimental::pmr; + +struct X { }; + +static_assert(std::is_same, + std::list>>::value, + "pmr::list"); diff --git a/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_map.cc b/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_map.cc new file mode 100644 index 00000000000..2074022dc2b --- /dev/null +++ b/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_map.cc @@ -0,0 +1,35 @@ +// Copyright (C) 2018 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++14 } } + +#include + +namespace xpmr = std::experimental::pmr; + +struct X { }; +struct Y { }; +struct Cmp { bool operator()(X, X) const { return false; } }; + +static_assert(std::is_same, + std::map, + xpmr::polymorphic_allocator>>>::value, + "pmr::map"); +static_assert(std::is_same, + std::map>>>::value, + "pmr::map"); diff --git a/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_match.cc b/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_match.cc new file mode 100644 index 00000000000..c237f1e9de9 --- /dev/null +++ b/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_match.cc @@ -0,0 +1,49 @@ +// Copyright (C) 2018 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++14 } } + +#include + +namespace xpmr = std::experimental::pmr; + +struct X; +static_assert(std::is_same, + std::match_results>>>::value, + "pmr::match_results"); + +static_assert(std::is_same>>>::value, + "pmr::cmatch"); +static_assert(std::is_same>>>::value, + "pmr::smatch"); +#ifdef _GLIBCXX_USE_WCHAR_T +static_assert(std::is_same>>>::value, + "pmr::wcmatch"); +static_assert(std::is_same>>>::value, + "pmr::wsmatch"); +#endif diff --git a/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_multimap.cc b/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_multimap.cc new file mode 100644 index 00000000000..e6acaf41122 --- /dev/null +++ b/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_multimap.cc @@ -0,0 +1,35 @@ +// Copyright (C) 2018 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++14 } } + +#include + +namespace xpmr = std::experimental::pmr; + +struct X { }; +struct Y { }; +struct Cmp { bool operator()(X, X) const { return false; } }; + +static_assert(std::is_same, + std::multimap, + xpmr::polymorphic_allocator>>>::value, + "pmr::multimap"); +static_assert(std::is_same, + std::multimap>>>::value, + "pmr::multimap"); diff --git a/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_multiset.cc b/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_multiset.cc new file mode 100644 index 00000000000..e98c556c489 --- /dev/null +++ b/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_multiset.cc @@ -0,0 +1,32 @@ +// Copyright (C) 2018 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++14 } } + +#include + +namespace xpmr = std::experimental::pmr; + +struct X { }; +struct Cmp { bool operator()(X, X) const { return false; } }; + +static_assert(std::is_same, + std::multiset, xpmr::polymorphic_allocator>>::value, + "pmr::multiset"); +static_assert(std::is_same, + std::multiset>>::value, + "pmr::multiset"); diff --git a/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_set.cc b/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_set.cc new file mode 100644 index 00000000000..182a11e9701 --- /dev/null +++ b/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_set.cc @@ -0,0 +1,32 @@ +// Copyright (C) 2018 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++14 } } + +#include + +namespace xpmr = std::experimental::pmr; + +struct X { }; +struct Cmp { bool operator()(X, X) const { return false; } }; + +static_assert(std::is_same, + std::set, xpmr::polymorphic_allocator>>::value, + "pmr::set"); +static_assert(std::is_same, + std::set>>::value, + "pmr::set"); diff --git a/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_string.cc b/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_string.cc new file mode 100644 index 00000000000..3cf8c94cfb1 --- /dev/null +++ b/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_string.cc @@ -0,0 +1,60 @@ +// Copyright (C) 2018 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++14 } } + +#include + +namespace xpmr = std::experimental::pmr; + +struct T : std::char_traits { }; + +static_assert(std::is_same, + std::basic_string, + xpmr::polymorphic_allocator>>::value, + "pmr::basic_string"); +static_assert(std::is_same, + std::basic_string>>::value, + "pmr::basic_string"); + +static_assert(std::is_same, + xpmr::polymorphic_allocator>>::value, + "pmr::string"); +static_assert(std::is_same, + xpmr::polymorphic_allocator>>::value, + "pmr::u16string"); +static_assert(std::is_same, + xpmr::polymorphic_allocator>>::value, + "pmr::u32string"); + +#ifdef _GLIBCXX_USE_WCHAR_T +static_assert(std::is_same, + std::basic_string, + xpmr::polymorphic_allocator>>::value, + "pmr::basic_string"); +static_assert(std::is_same, + std::basic_string>>::value, + "pmr::basic_string"); + +static_assert(std::is_same, + xpmr::polymorphic_allocator>>::value, + "pmr::wstring"); +#endif diff --git a/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_unordered_map.cc b/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_unordered_map.cc new file mode 100644 index 00000000000..15e00e7e720 --- /dev/null +++ b/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_unordered_map.cc @@ -0,0 +1,40 @@ +// Copyright (C) 2018 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++14 } } + +#include + +namespace xpmr = std::experimental::pmr; + +struct X { }; +struct Y { }; +struct Hash { std::size_t operator()(X) const { return 0; } }; +struct Eq { bool operator()(X, X) const { return true; } }; + +static_assert(std::is_same, + std::unordered_map, std::equal_to, + xpmr::polymorphic_allocator>>>::value, + "pmr::unordered_map"); +static_assert(std::is_same, + std::unordered_map, + xpmr::polymorphic_allocator>>>::value, + "pmr::unordered_map"); +static_assert(std::is_same, + std::unordered_map>>>::value, + "pmr::unordered_map"); diff --git a/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_unordered_multimap.cc b/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_unordered_multimap.cc new file mode 100644 index 00000000000..67054ffb4c9 --- /dev/null +++ b/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_unordered_multimap.cc @@ -0,0 +1,40 @@ +// Copyright (C) 2018 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++14 } } + +#include + +namespace xpmr = std::experimental::pmr; + +struct X { }; +struct Y { }; +struct Hash { std::size_t operator()(X) const { return 0; } }; +struct Eq { bool operator()(X, X) const { return true; } }; + +static_assert(std::is_same, + std::unordered_multimap, std::equal_to, + xpmr::polymorphic_allocator>>>::value, + "pmr::unordered_multimap"); +static_assert(std::is_same, + std::unordered_multimap, + xpmr::polymorphic_allocator>>>::value, + "pmr::unordered_multimap"); +static_assert(std::is_same, + std::unordered_multimap>>>::value, + "pmr::unordered_multimap"); diff --git a/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_unordered_multiset.cc b/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_unordered_multiset.cc new file mode 100644 index 00000000000..aaba4d3ec47 --- /dev/null +++ b/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_unordered_multiset.cc @@ -0,0 +1,39 @@ +// Copyright (C) 2018 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++14 } } + +#include + +namespace xpmr = std::experimental::pmr; + +struct X { }; +struct Hash { std::size_t operator()(X) const { return 0; } }; +struct Eq { bool operator()(X, X) const { return true; } }; + +static_assert(std::is_same, + std::unordered_multiset, std::equal_to, + xpmr::polymorphic_allocator>>::value, + "pmr::unordered_multiset"); +static_assert(std::is_same, + std::unordered_multiset, + xpmr::polymorphic_allocator>>::value, + "pmr::unordered_multiset"); +static_assert(std::is_same, + std::unordered_multiset>>::value, + "pmr::unordered_multiset"); diff --git a/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_unordered_set.cc b/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_unordered_set.cc new file mode 100644 index 00000000000..b90051ec074 --- /dev/null +++ b/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_unordered_set.cc @@ -0,0 +1,39 @@ +// Copyright (C) 2018 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++14 } } + +#include + +namespace xpmr = std::experimental::pmr; + +struct X { }; +struct Hash { std::size_t operator()(X) const { return 0; } }; +struct Eq { bool operator()(X, X) const { return true; } }; + +static_assert(std::is_same, + std::unordered_set, std::equal_to, + xpmr::polymorphic_allocator>>::value, + "pmr::unordered_set"); +static_assert(std::is_same, + std::unordered_set, + xpmr::polymorphic_allocator>>::value, + "pmr::unordered_set"); +static_assert(std::is_same, + std::unordered_set>>::value, + "pmr::unordered_set"); diff --git a/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_vector.cc b/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_vector.cc new file mode 100644 index 00000000000..f780aa5666b --- /dev/null +++ b/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_vector.cc @@ -0,0 +1,28 @@ +// Copyright (C) 2018 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++14 } } + +#include + +namespace xpmr = std::experimental::pmr; + +struct X { }; + +static_assert(std::is_same, + std::vector>>::value, + "pmr::vector");