1*f8b5ac34SHristo Hristov //===----------------------------------------------------------------------===//
2*f8b5ac34SHristo Hristov //
3*f8b5ac34SHristo Hristov // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*f8b5ac34SHristo Hristov // See https://llvm.org/LICENSE.txt for license information.
5*f8b5ac34SHristo Hristov // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*f8b5ac34SHristo Hristov //
7*f8b5ac34SHristo Hristov //===----------------------------------------------------------------------===//
8*f8b5ac34SHristo Hristov // UNSUPPORTED: c++03, c++11, c++14, c++17
9*f8b5ac34SHristo Hristov 
10*f8b5ac34SHristo Hristov // <set>
11*f8b5ac34SHristo Hristov 
12*f8b5ac34SHristo Hristov // class set
13*f8b5ac34SHristo Hristov 
14*f8b5ac34SHristo Hristov // template<class Key, class Compare, class Allocator>
15*f8b5ac34SHristo Hristov //   synth-three-way-result<Key> operator<=>(const set<Key, Compare, Allocator>& x,
16*f8b5ac34SHristo Hristov //                                           const set<Key, Compare, Allocator>& y);
17*f8b5ac34SHristo Hristov 
18*f8b5ac34SHristo Hristov #include <set>
19*f8b5ac34SHristo Hristov 
20*f8b5ac34SHristo Hristov #include "test_allocator.h"
21*f8b5ac34SHristo Hristov 
main(int,char **)22*f8b5ac34SHristo Hristov int main(int, char**) {
23*f8b5ac34SHristo Hristov   // Mismatching allocators
24*f8b5ac34SHristo Hristov   {
25*f8b5ac34SHristo Hristov     std::multiset<int, std::less<int>, std::allocator<int>> s1;
26*f8b5ac34SHristo Hristov     std::multiset<int, std::less<int>, test_allocator<int>> s2;
27*f8b5ac34SHristo Hristov     // expected-error@+1 {{invalid operands to binary expression}}
28*f8b5ac34SHristo Hristov     s1 <=> s2;
29*f8b5ac34SHristo Hristov     // expected-error@+1 {{invalid operands to binary expression}}
30*f8b5ac34SHristo Hristov     s2 <=> s1;
31*f8b5ac34SHristo Hristov   }
32*f8b5ac34SHristo Hristov   // Mismatching comparision functions
33*f8b5ac34SHristo Hristov   {
34*f8b5ac34SHristo Hristov     std::multiset<int, std::less<int>> s1;
35*f8b5ac34SHristo Hristov     std::multiset<int, std::greater<int>> s2;
36*f8b5ac34SHristo Hristov     // expected-error@+1 {{invalid operands to binary expression}}
37*f8b5ac34SHristo Hristov     s1 <=> s2;
38*f8b5ac34SHristo Hristov     // expected-error@+1 {{invalid operands to binary expression}}
39*f8b5ac34SHristo Hristov     s2 <=> s1;
40*f8b5ac34SHristo Hristov   }
41*f8b5ac34SHristo Hristov   {
42*f8b5ac34SHristo Hristov     std::multiset<int, std::less<int>> s1;
43*f8b5ac34SHristo Hristov     std::multiset<int, std::less<float>> s2;
44*f8b5ac34SHristo Hristov     // expected-error@+1 {{invalid operands to binary expression}}
45*f8b5ac34SHristo Hristov     s1 <=> s2;
46*f8b5ac34SHristo Hristov     // expected-error@+1 {{invalid operands to binary expression}}
47*f8b5ac34SHristo Hristov     s2 <=> s1;
48*f8b5ac34SHristo Hristov   }
49*f8b5ac34SHristo Hristov   // Mismatching types
50*f8b5ac34SHristo Hristov   {
51*f8b5ac34SHristo Hristov     std::multiset<int> s1;
52*f8b5ac34SHristo Hristov     std::multiset<float> s2;
53*f8b5ac34SHristo Hristov     // expected-error@+1 {{invalid operands to binary expression}}
54*f8b5ac34SHristo Hristov     s1 <=> s2;
55*f8b5ac34SHristo Hristov     // expected-error@+1 {{invalid operands to binary expression}}
56*f8b5ac34SHristo Hristov     s2 <=> s1;
57*f8b5ac34SHristo Hristov   }
58*f8b5ac34SHristo Hristov 
59*f8b5ac34SHristo Hristov   return 0;
60*f8b5ac34SHristo Hristov }
61