// -*- C++ -*-
//===------------------------- unordered_map ------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#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 */
