// -*- C++ -*-
//===--------------------------- list ------------------------------------===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is dual licensed under the MIT and the University of Illinois Open
// Source Licenses. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

#ifndef _LIBCPP_EXPERIMENTAL_SET
#define _LIBCPP_EXPERIMENTAL_SET
/*
    experimental/set synopsis

// C++1z
namespace std {
namespace experimental {
inline namespace fundamentals_v1 {
namespace pmr {

  template <class Key, class T, class Compare = less<Key>>
  using set = std::set<Key, T, Compare,
                       polymorphic_allocator<pair<const Key,T>>>;

  template <class Key, class T, class Compare = less<Key>>
  using multiset = std::multiset<Key, T, Compare,
                                 polymorphic_allocator<pair<const Key,T>>>;

} // namespace pmr
} // namespace fundamentals_v1
} // namespace experimental
} // namespace std

 */

#include <experimental/__config>
#include <set>
#include <experimental/memory_resource>

#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif

_LIBCPP_BEGIN_NAMESPACE_LFTS_PMR

template <class _Value, class  _Compare = less<_Value>>
using set = _VSTD::set<_Value, _Compare,
                        polymorphic_allocator<_Value>>;

template <class _Value, class  _Compare = less<_Value>>
using multiset = _VSTD::multiset<_Value, _Compare,
                        polymorphic_allocator<_Value>>;

_LIBCPP_END_NAMESPACE_LFTS_PMR

#endif /* _LIBCPP_EXPERIMENTAL_SET */
