1*7a6aaf9bSLouis Dionne //===----------------------------------------------------------------------===//
2*7a6aaf9bSLouis Dionne //
3*7a6aaf9bSLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*7a6aaf9bSLouis Dionne // See https://llvm.org/LICENSE.txt for license information.
5*7a6aaf9bSLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*7a6aaf9bSLouis Dionne //
7*7a6aaf9bSLouis Dionne //===----------------------------------------------------------------------===//
8*7a6aaf9bSLouis Dionne 
9*7a6aaf9bSLouis Dionne // <map>
10*7a6aaf9bSLouis Dionne 
11*7a6aaf9bSLouis Dionne // Check that std::multimap fails to instantiate if the comparison predicate is
12*7a6aaf9bSLouis Dionne // not copy-constructible. This is LWG issue 2436
13*7a6aaf9bSLouis Dionne 
14*7a6aaf9bSLouis Dionne #include <map>
15*7a6aaf9bSLouis Dionne 
16*7a6aaf9bSLouis Dionne template <class T>
17*7a6aaf9bSLouis Dionne struct Comp {
operator ()Comp18*7a6aaf9bSLouis Dionne     bool operator () (const T& lhs, const T& rhs) const { return lhs < rhs; }
19*7a6aaf9bSLouis Dionne 
CompComp20*7a6aaf9bSLouis Dionne     Comp () {}
21*7a6aaf9bSLouis Dionne private:
22*7a6aaf9bSLouis Dionne     Comp (const Comp &); // declared but not defined
23*7a6aaf9bSLouis Dionne     };
24*7a6aaf9bSLouis Dionne 
25*7a6aaf9bSLouis Dionne 
main(int,char **)26*7a6aaf9bSLouis Dionne int main(int, char**) {
27*7a6aaf9bSLouis Dionne     std::multimap<int, int, Comp<int> > m;
28*7a6aaf9bSLouis Dionne 
29*7a6aaf9bSLouis Dionne   return 0;
30*7a6aaf9bSLouis Dionne }
31