// -*- C++ -*-
//===----------------------------------------------------------------------===//
//
// 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
//
//===----------------------------------------------------------------------===//

module;
#if __has_include(<flat_map>)
#  error "include this header unconditionally and uncomment the exported symbols"
#  include <flat_map>
#endif

export module std:flat_map;
export namespace std {
#if 0
  // [flat.map], class template flat_­map
  using std::flat_map;

  using std::sorted_unique;
  using std::sorted_unique_t;

  using std::uses_allocator;

  // [flat.map.erasure], erasure for flat_­map
  using std::erase_if;

  // [flat.multimap], class template flat_­multimap
  using std::flat_multimap;

  using std::sorted_equivalent;
  using std::sorted_equivalent_t;

  // [flat.multimap.erasure], erasure for flat_­multimap
#endif
} // namespace std
