1
2//===----------------------------------------------------------------------===//
3//
4// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5// See https://llvm.org/LICENSE.txt for license information.
6// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7//
8//===----------------------------------------------------------------------===//
9
10// <unordered_map>
11
12// Check that std::unordered_multimap and its iterators can be instantiated with an incomplete
13// type.
14
15#include <unordered_map>
16
17#include "min_allocator.h"
18#include "test_macros.h"
19
20template <class Tp>
21struct MyHash {
22 MyHash() {}
23 std::size_t operator()(Tp const&) const { return 42; }
24};
25
26struct A {
27 typedef std::unordered_multimap<A, A, MyHash<A> > Map;
28 Map m;
29 Map::iterator it;
30 Map::const_iterator cit;
31 Map::local_iterator lit;
32 Map::const_local_iterator clit;
33};
34
35inline bool operator==(A const& L, A const& R) { return &L == &R; }
36
37int main(int, char**) {
38 A a;
39
40 // Make sure that the allocator isn't rebound to an incomplete type
41 std::unordered_multimap<int,
42 int,
43 std::hash<int>,
44 std::equal_to<int>,
45 complete_type_allocator<std::pair<const int, int> > >
46 m;
47
48 return 0;
49}
50

source code of libcxx/test/std/containers/unord/unord.multimap/incomplete.pass.cpp