1dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier// -*- C++ -*- 2dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier//===----------------------------------------------------------------------===// 3dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier// 4dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier// The LLVM Compiler Infrastructure 5dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier// 6dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier// This file is dual licensed under the MIT and the University of Illinois Open 7dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier// Source Licenses. See LICENSE.TXT for details. 8dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier// 9dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier//===----------------------------------------------------------------------===// 10dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier 11d8df1781e3e0041d81899c9131b43c6655c75351Dan Albert// REQUIRES: c++experimental 12dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier// UNSUPPORTED: c++98, c++03 13dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier 14dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier// <experimental/unordered_set> 15dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier 16dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier// namespace std { namespace experimental { namespace pmr { 17dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier// template <class V, class H = hash<V>, class P = equal_to<V> > 18dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier// using unordered_set = 19dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier// ::std::unordered_set<V, H, P, polymorphic_allocator<V>> 20dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier// 21dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier// template <class V, class H = hash<V>, class P = equal_to<V> > 22dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier// using unordered_multiset = 23dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier// ::std::unordered_multiset<V, H, P, polymorphic_allocator<V>> 24dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier// 25dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier// }}} // namespace std::experimental::pmr 26dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier 27dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier#include <experimental/unordered_set> 28dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier#include <experimental/memory_resource> 29dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier#include <type_traits> 30dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier#include <cassert> 31dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier 32dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiseliernamespace pmr = std::experimental::pmr; 33dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier 34dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiseliertemplate <class T> 35dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselierstruct MyHash : std::hash<T> {}; 36dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier 37dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiseliertemplate <class T> 38dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselierstruct MyPred : std::equal_to<T> {}; 39dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier 40dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselierint main() 41dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier{ 42dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier using V = char; 43dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier using DH = std::hash<V>; 44dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier using MH = MyHash<V>; 45dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier using DP = std::equal_to<V>; 46dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier using MP = MyPred<V>; 47dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier { 48dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier using StdSet = std::unordered_set<V, DH, DP, pmr::polymorphic_allocator<V>>; 49dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier using PmrSet = pmr::unordered_set<V>; 50dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier static_assert(std::is_same<StdSet, PmrSet>::value, ""); 51dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier } 52dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier { 53dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier using StdSet = std::unordered_set<V, MH, DP, pmr::polymorphic_allocator<V>>; 54dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier using PmrSet = pmr::unordered_set<V, MH>; 55dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier static_assert(std::is_same<StdSet, PmrSet>::value, ""); 56dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier } 57dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier { 58dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier using StdSet = std::unordered_set<V, MH, MP, pmr::polymorphic_allocator<V>>; 59dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier using PmrSet = pmr::unordered_set<V, MH, MP>; 60dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier static_assert(std::is_same<StdSet, PmrSet>::value, ""); 61dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier } 62dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier { 63174432dbd52dddcb683ef14b3c8de083cad9d28cMarshall Clow pmr::unordered_set<int> m; 64dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier assert(m.get_allocator().resource() == pmr::get_default_resource()); 65dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier } 66dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier { 67dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier using StdSet = std::unordered_multiset<V, DH, DP, pmr::polymorphic_allocator<V>>; 68dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier using PmrSet = pmr::unordered_multiset<V>; 69dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier static_assert(std::is_same<StdSet, PmrSet>::value, ""); 70dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier } 71dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier { 72dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier using StdSet = std::unordered_multiset<V, MH, DP, pmr::polymorphic_allocator<V>>; 73dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier using PmrSet = pmr::unordered_multiset<V, MH>; 74dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier static_assert(std::is_same<StdSet, PmrSet>::value, ""); 75dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier } 76dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier { 77dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier using StdSet = std::unordered_multiset<V, MH, MP, pmr::polymorphic_allocator<V>>; 78dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier using PmrSet = pmr::unordered_multiset<V, MH, MP>; 79dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier static_assert(std::is_same<StdSet, PmrSet>::value, ""); 80dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier } 81dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier { 82174432dbd52dddcb683ef14b3c8de083cad9d28cMarshall Clow pmr::unordered_multiset<int> m; 83dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier assert(m.get_allocator().resource() == pmr::get_default_resource()); 84dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier } 85dba23b499be925f98fba2345eaacb99b88eba9eaEric Fiselier} 86