1//===----------------------------------------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20
10
11// <flat_map>
12
13// class flat_multimap
14
15// iterator, const_iterator, reverse_iterator, const_reverse_iterator
16
17#include <flat_map>
18#include <deque>
19#include <functional>
20#include <iterator>
21#include <string>
22#include <vector>
23#include <type_traits>
24
25#include "MinSequenceContainer.h"
26#include "test_macros.h"
27#include "min_allocator.h"
28
29template <class KeyContainer, class ValueContainer>
30void test() {
31 using Key = typename KeyContainer::value_type;
32 using Value = typename ValueContainer::value_type;
33 using C = std::flat_multimap<Key, Value, std::less<Key>, KeyContainer, ValueContainer>;
34 using I = C::iterator;
35 using CI = C::const_iterator;
36 using RI = C::reverse_iterator;
37 using CRI = C::const_reverse_iterator;
38 static_assert(std::random_access_iterator<I>);
39 static_assert(std::random_access_iterator<CI>);
40 static_assert(std::random_access_iterator<RI>);
41 static_assert(std::random_access_iterator<CRI>);
42 static_assert(!std::contiguous_iterator<I>);
43 static_assert(!std::contiguous_iterator<CI>);
44 static_assert(!std::contiguous_iterator<RI>);
45 static_assert(!std::contiguous_iterator<CRI>);
46 static_assert(!std::indirectly_writable<I, std::pair<int, char>>);
47 static_assert(!std::indirectly_writable<CI, std::pair<int, char>>);
48 static_assert(!std::indirectly_writable<RI, std::pair<int, char>>);
49 static_assert(!std::indirectly_writable<CRI, std::pair<int, char>>);
50 static_assert(std::sentinel_for<I, I>);
51 static_assert(std::sentinel_for<I, CI>);
52 static_assert(!std::sentinel_for<I, RI>);
53 static_assert(!std::sentinel_for<I, CRI>);
54 static_assert(std::sentinel_for<CI, I>);
55 static_assert(std::sentinel_for<CI, CI>);
56 static_assert(!std::sentinel_for<CI, RI>);
57 static_assert(!std::sentinel_for<CI, CRI>);
58 static_assert(!std::sentinel_for<RI, I>);
59 static_assert(!std::sentinel_for<RI, CI>);
60 static_assert(std::sentinel_for<RI, RI>);
61 static_assert(std::sentinel_for<RI, CRI>);
62 static_assert(!std::sentinel_for<CRI, I>);
63 static_assert(!std::sentinel_for<CRI, CI>);
64 static_assert(std::sentinel_for<CRI, RI>);
65 static_assert(std::sentinel_for<CRI, CRI>);
66 static_assert(std::indirectly_movable_storable<I, std::pair<int, char>*>);
67 static_assert(std::indirectly_movable_storable<CI, std::pair<int, char>*>);
68 static_assert(std::indirectly_movable_storable<RI, std::pair<int, char>*>);
69 static_assert(std::indirectly_movable_storable<CRI, std::pair<int, char>*>);
70
71#ifdef _LIBCPP_VERSION
72 static_assert(std::is_same_v<typename std::iterator_traits<I>::iterator_category, std::random_access_iterator_tag>);
73 static_assert(std::is_same_v<typename std::iterator_traits<CI>::iterator_category, std::random_access_iterator_tag>);
74 static_assert(std::is_same_v<typename std::iterator_traits<RI>::iterator_category, std::random_access_iterator_tag>);
75 static_assert(std::is_same_v<typename std::iterator_traits<CRI>::iterator_category, std::random_access_iterator_tag>);
76#endif
77}
78
79void test() {
80 test<std::vector<int>, std::vector<char>>();
81 test<std::deque<int>, std::vector<char>>();
82 test<MinSequenceContainer<int>, MinSequenceContainer<char>>();
83 test<std::vector<int, min_allocator<int>>, std::vector<char, min_allocator<char>>>();
84}
85

Provided by KDAB

Privacy Policy
Improve your Profiling and Debugging skills
Find out more

source code of libcxx/test/std/containers/container.adaptors/flat.multimap/flat.multimap.iterators/iterator_concept_conformance.compile.pass.cpp