The typedefs in <experimental/regex> and <experimental/string> 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. Tested x86_64-linux, committed to trunk. Backports to follow.
commit c4903b0ca514d530ba74d5fb5364386d7d298105 Author: redi <redi@138bc75d-0d04-0410-961f-82ee72b054a4> Date: Wed Aug 15 19:20:02 2018 +0000 Fix experimental::pmr typedefs and add tests The typedefs in <experimental/regex> and <experimental/string> 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. 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<typename _BidirectionalIterator> using match_results = std::match_results<_BidirectionalIterator, polymorphic_allocator< @@ -58,7 +56,6 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 typedef match_results<string::const_iterator> smatch; typedef match_results<wstring::const_iterator> 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<typename _CharT, typename _Traits = char_traits<_CharT>> using basic_string = @@ -77,7 +76,6 @@ inline namespace fundamentals_v2 typedef basic_string<char32_t> u32string; typedef basic_string<wchar_t> 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 +// <http://www.gnu.org/licenses/>. + +// { dg-do compile { target c++14 } } + +#include <experimental/deque> + +namespace xpmr = std::experimental::pmr; + +struct X { }; + +static_assert(std::is_same<xpmr::deque<X>, + std::deque<X, xpmr::polymorphic_allocator<X>>>::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 +// <http://www.gnu.org/licenses/>. + +// { dg-do compile { target c++14 } } + +#include <experimental/forward_list> + +namespace xpmr = std::experimental::pmr; + +struct X { }; + +static_assert(std::is_same<xpmr::forward_list<X>, + std::forward_list<X, xpmr::polymorphic_allocator<X>>>::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 +// <http://www.gnu.org/licenses/>. + +// { dg-do compile { target c++14 } } + +#include <experimental/list> + +namespace xpmr = std::experimental::pmr; + +struct X { }; + +static_assert(std::is_same<xpmr::list<X>, + std::list<X, xpmr::polymorphic_allocator<X>>>::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 +// <http://www.gnu.org/licenses/>. + +// { dg-do compile { target c++14 } } + +#include <experimental/map> + +namespace xpmr = std::experimental::pmr; + +struct X { }; +struct Y { }; +struct Cmp { bool operator()(X, X) const { return false; } }; + +static_assert(std::is_same<xpmr::map<X, Y>, + std::map<X, Y, std::less<X>, + xpmr::polymorphic_allocator<std::pair<const X, Y>>>>::value, + "pmr::map"); +static_assert(std::is_same<xpmr::map<X, Y, Cmp>, + std::map<X, Y, Cmp, + xpmr::polymorphic_allocator<std::pair<const X, Y>>>>::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 +// <http://www.gnu.org/licenses/>. + +// { dg-do compile { target c++14 } } + +#include <experimental/regex> + +namespace xpmr = std::experimental::pmr; + +struct X; +static_assert(std::is_same<xpmr::match_results<X*>, + std::match_results<X*, + xpmr::polymorphic_allocator<std::sub_match<X*>>>>::value, + "pmr::match_results"); + +static_assert(std::is_same<xpmr::cmatch, + std::match_results<const char*, + xpmr::polymorphic_allocator<std::sub_match<const char*>>>>::value, + "pmr::cmatch"); +static_assert(std::is_same<xpmr::smatch, + std::match_results<xpmr::string::const_iterator, + xpmr::polymorphic_allocator< + std::sub_match<xpmr::string::const_iterator>>>>::value, + "pmr::smatch"); +#ifdef _GLIBCXX_USE_WCHAR_T +static_assert(std::is_same<xpmr::wcmatch, + std::match_results<const wchar_t*, + xpmr::polymorphic_allocator<std::sub_match<const wchar_t*>>>>::value, + "pmr::wcmatch"); +static_assert(std::is_same<xpmr::wsmatch, + std::match_results<xpmr::wstring::const_iterator, + xpmr::polymorphic_allocator< + std::sub_match<xpmr::wstring::const_iterator>>>>::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 +// <http://www.gnu.org/licenses/>. + +// { dg-do compile { target c++14 } } + +#include <experimental/map> + +namespace xpmr = std::experimental::pmr; + +struct X { }; +struct Y { }; +struct Cmp { bool operator()(X, X) const { return false; } }; + +static_assert(std::is_same<xpmr::multimap<X, Y>, + std::multimap<X, Y, std::less<X>, + xpmr::polymorphic_allocator<std::pair<const X, Y>>>>::value, + "pmr::multimap"); +static_assert(std::is_same<xpmr::multimap<X, Y, Cmp>, + std::multimap<X, Y, Cmp, + xpmr::polymorphic_allocator<std::pair<const X, Y>>>>::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 +// <http://www.gnu.org/licenses/>. + +// { dg-do compile { target c++14 } } + +#include <experimental/set> + +namespace xpmr = std::experimental::pmr; + +struct X { }; +struct Cmp { bool operator()(X, X) const { return false; } }; + +static_assert(std::is_same<xpmr::multiset<X>, + std::multiset<X, std::less<X>, xpmr::polymorphic_allocator<X>>>::value, + "pmr::multiset"); +static_assert(std::is_same<xpmr::multiset<X, Cmp>, + std::multiset<X, Cmp, xpmr::polymorphic_allocator<X>>>::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 +// <http://www.gnu.org/licenses/>. + +// { dg-do compile { target c++14 } } + +#include <experimental/set> + +namespace xpmr = std::experimental::pmr; + +struct X { }; +struct Cmp { bool operator()(X, X) const { return false; } }; + +static_assert(std::is_same<xpmr::set<X>, + std::set<X, std::less<X>, xpmr::polymorphic_allocator<X>>>::value, + "pmr::set"); +static_assert(std::is_same<xpmr::set<X, Cmp>, + std::set<X, Cmp, xpmr::polymorphic_allocator<X>>>::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 +// <http://www.gnu.org/licenses/>. + +// { dg-do compile { target c++14 } } + +#include <experimental/string> + +namespace xpmr = std::experimental::pmr; + +struct T : std::char_traits<char> { }; + +static_assert(std::is_same<xpmr::basic_string<char>, + std::basic_string<char, std::char_traits<char>, + xpmr::polymorphic_allocator<char>>>::value, + "pmr::basic_string"); +static_assert(std::is_same<xpmr::basic_string<char, T>, + std::basic_string<char, T, xpmr::polymorphic_allocator<char>>>::value, + "pmr::basic_string"); + +static_assert(std::is_same<xpmr::string, + std::basic_string<char, std::char_traits<char>, + xpmr::polymorphic_allocator<char>>>::value, + "pmr::string"); +static_assert(std::is_same<xpmr::u16string, + std::basic_string<char16_t, std::char_traits<char16_t>, + xpmr::polymorphic_allocator<char16_t>>>::value, + "pmr::u16string"); +static_assert(std::is_same<xpmr::u32string, + std::basic_string<char32_t, std::char_traits<char32_t>, + xpmr::polymorphic_allocator<char32_t>>>::value, + "pmr::u32string"); + +#ifdef _GLIBCXX_USE_WCHAR_T +static_assert(std::is_same<xpmr::basic_string<wchar_t>, + std::basic_string<wchar_t, std::char_traits<wchar_t>, + xpmr::polymorphic_allocator<wchar_t>>>::value, + "pmr::basic_string<wchar_t>"); +static_assert(std::is_same<xpmr::basic_string<wchar_t, T>, + std::basic_string<wchar_t, T, xpmr::polymorphic_allocator<wchar_t>>>::value, + "pmr::basic_string<wchar_t>"); + +static_assert(std::is_same<xpmr::wstring, + std::basic_string<wchar_t, std::char_traits<wchar_t>, + xpmr::polymorphic_allocator<wchar_t>>>::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 +// <http://www.gnu.org/licenses/>. + +// { dg-do compile { target c++14 } } + +#include <experimental/unordered_map> + +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<xpmr::unordered_map<X, Y>, + std::unordered_map<X, Y, std::hash<X>, std::equal_to<X>, + xpmr::polymorphic_allocator<std::pair<const X, Y>>>>::value, + "pmr::unordered_map"); +static_assert(std::is_same<xpmr::unordered_map<X, Y, Hash>, + std::unordered_map<X, Y, Hash, std::equal_to<X>, + xpmr::polymorphic_allocator<std::pair<const X, Y>>>>::value, + "pmr::unordered_map"); +static_assert(std::is_same<xpmr::unordered_map<X, Y, Hash, Eq>, + std::unordered_map<X, Y, Hash, Eq, + xpmr::polymorphic_allocator<std::pair<const X, Y>>>>::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 +// <http://www.gnu.org/licenses/>. + +// { dg-do compile { target c++14 } } + +#include <experimental/unordered_map> + +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<xpmr::unordered_multimap<X, Y>, + std::unordered_multimap<X, Y, std::hash<X>, std::equal_to<X>, + xpmr::polymorphic_allocator<std::pair<const X, Y>>>>::value, + "pmr::unordered_multimap"); +static_assert(std::is_same<xpmr::unordered_multimap<X, Y, Hash>, + std::unordered_multimap<X, Y, Hash, std::equal_to<X>, + xpmr::polymorphic_allocator<std::pair<const X, Y>>>>::value, + "pmr::unordered_multimap"); +static_assert(std::is_same<xpmr::unordered_multimap<X, Y, Hash, Eq>, + std::unordered_multimap<X, Y, Hash, Eq, + xpmr::polymorphic_allocator<std::pair<const X, Y>>>>::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 +// <http://www.gnu.org/licenses/>. + +// { dg-do compile { target c++14 } } + +#include <experimental/unordered_set> + +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<xpmr::unordered_multiset<X>, + std::unordered_multiset<X, std::hash<X>, std::equal_to<X>, + xpmr::polymorphic_allocator<X>>>::value, + "pmr::unordered_multiset"); +static_assert(std::is_same<xpmr::unordered_multiset<X, Hash>, + std::unordered_multiset<X, Hash, std::equal_to<X>, + xpmr::polymorphic_allocator<X>>>::value, + "pmr::unordered_multiset"); +static_assert(std::is_same<xpmr::unordered_multiset<X, Hash, Eq>, + std::unordered_multiset<X, Hash, Eq, + xpmr::polymorphic_allocator<X>>>::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 +// <http://www.gnu.org/licenses/>. + +// { dg-do compile { target c++14 } } + +#include <experimental/unordered_set> + +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<xpmr::unordered_set<X>, + std::unordered_set<X, std::hash<X>, std::equal_to<X>, + xpmr::polymorphic_allocator<X>>>::value, + "pmr::unordered_set"); +static_assert(std::is_same<xpmr::unordered_set<X, Hash>, + std::unordered_set<X, Hash, std::equal_to<X>, + xpmr::polymorphic_allocator<X>>>::value, + "pmr::unordered_set"); +static_assert(std::is_same<xpmr::unordered_set<X, Hash, Eq>, + std::unordered_set<X, Hash, Eq, + xpmr::polymorphic_allocator<X>>>::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 +// <http://www.gnu.org/licenses/>. + +// { dg-do compile { target c++14 } } + +#include <experimental/vector> + +namespace xpmr = std::experimental::pmr; + +struct X { }; + +static_assert(std::is_same<xpmr::vector<X>, + std::vector<X, xpmr::polymorphic_allocator<X>>>::value, + "pmr::vector");