// -*- C++ -*-
//===------------------------- unordered_map ------------------------------===//
//
//                     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_UNORDERED_MAP
#define _LIBCPP_EXPERIMENTAL_UNORDERED_MAP
/*
    experimental/unordered_map synopsis

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

  template <class Key, class T,
            class Hash = hash<Key>,
            class Pred = equal_to<Key>>
  using unordered_map =
    std::unordered_map<Key, T, Hash, Pred,
                       polymorphic_allocator<pair<const Key,T>>>;

  template <class Key, class T,
            class Hash = hash<Key>,
            class Pred = equal_to<Key>>
  using unordered_multimap =
    std::unordered_multimap<Key, T, Hash, Pred,
                            polymorphic_allocator<pair<const Key,T>>>;

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

 */

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

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

_LIBCPP_BEGIN_NAMESPACE_LFTS_PMR

template <class _Key, class _Value,
          class _Hash = hash<_Key>, class _Pred = equal_to<_Key>>
using unordered_map = _VSTD::unordered_map<_Key, _Value, _Hash, _Pred,
                        polymorphic_allocator<pair<const _Key, _Value>>>;

template <class _Key, class _Value,
          class _Hash = hash<_Key>, class _Pred = equal_to<_Key>>
using unordered_multimap = _VSTD::unordered_multimap<_Key, _Value, _Hash, _Pred,
                        polymorphic_allocator<pair<const _Key, _Value>>>;

_LIBCPP_END_NAMESPACE_LFTS_PMR

#endif /* _LIBCPP_EXPERIMENTAL_UNORDERED_MAP */
