1 //===----------------------------------------------------------------------===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 // UNSUPPORTED: c++98, c++03, c++11
11
12 // <set>
13
14 // class set
15
16 // template<typename K>
17 // iterator lower_bound(const K& x); // C++14
18 // template<typename K>
19 // const_iterator lower_bound(const K& x) const; // C++14
20
21 #include <cassert>
22 #include <set>
23 #include <utility>
24
25 #include "min_allocator.h"
26 #include "private_constructor.hpp"
27 #include "test_macros.h"
28
29 struct Comp {
30 using is_transparent = void;
31
operator ()Comp32 bool operator()(const std::pair<int, int> &lhs,
33 const std::pair<int, int> &rhs) const {
34 return lhs < rhs;
35 }
36
operator ()Comp37 bool operator()(const std::pair<int, int> &lhs, int rhs) const {
38 return lhs.first < rhs;
39 }
40
operator ()Comp41 bool operator()(int lhs, const std::pair<int, int> &rhs) const {
42 return lhs < rhs.first;
43 }
44 };
45
main()46 int main() {
47 std::set<std::pair<int, int>, Comp> s{{2, 1}, {1, 2}, {1, 3}, {1, 4}, {2, 2}};
48
49 auto cnt = s.count(1);
50 assert(cnt == 3);
51 }
52