1*decf22e5SEric Fiselier //===----------------------------------------------------------------------===//
2*decf22e5SEric Fiselier //
3*decf22e5SEric Fiselier //                     The LLVM Compiler Infrastructure
4*decf22e5SEric Fiselier //
5*decf22e5SEric Fiselier // This file is dual licensed under the MIT and the University of Illinois Open
6*decf22e5SEric Fiselier // Source Licenses. See LICENSE.TXT for details.
7*decf22e5SEric Fiselier //
8*decf22e5SEric Fiselier //===----------------------------------------------------------------------===//
9*decf22e5SEric Fiselier 
10*decf22e5SEric Fiselier // UNSUPPORTED: c++98, c++03, c++11
11*decf22e5SEric Fiselier 
12*decf22e5SEric Fiselier // XFAIL: gcc-7, gcc-8
13*decf22e5SEric Fiselier 
14*decf22e5SEric Fiselier // <functional>
15*decf22e5SEric Fiselier 
16*decf22e5SEric Fiselier // equal_to, not_equal_to, less, et al.
17*decf22e5SEric Fiselier 
18*decf22e5SEric Fiselier // Test that these types can be constructed w/o an initializer in a constexpr
19*decf22e5SEric Fiselier // context. This is specifically testing gcc.gnu.org/PR83921
20*decf22e5SEric Fiselier 
21*decf22e5SEric Fiselier 
22*decf22e5SEric Fiselier #include <functional>
23*decf22e5SEric Fiselier #include "test_macros.h"
24*decf22e5SEric Fiselier 
25*decf22e5SEric Fiselier template <class T>
26*decf22e5SEric Fiselier constexpr bool test_constexpr_context() {
27*decf22e5SEric Fiselier   std::equal_to<T> eq;
28*decf22e5SEric Fiselier   ((void)eq);
29*decf22e5SEric Fiselier   std::not_equal_to<T> neq;
30*decf22e5SEric Fiselier   ((void)neq);
31*decf22e5SEric Fiselier   std::less<T> l;
32*decf22e5SEric Fiselier   ((void)l);
33*decf22e5SEric Fiselier   std::less_equal<T> le;
34*decf22e5SEric Fiselier   ((void)le);
35*decf22e5SEric Fiselier   std::greater<T> g;
36*decf22e5SEric Fiselier   ((void)g);
37*decf22e5SEric Fiselier   std::greater_equal<T> ge;
38*decf22e5SEric Fiselier   ((void)ge);
39*decf22e5SEric Fiselier   return true;
40*decf22e5SEric Fiselier }
41*decf22e5SEric Fiselier 
42*decf22e5SEric Fiselier static_assert(test_constexpr_context<int>(), "");
43*decf22e5SEric Fiselier static_assert(test_constexpr_context<void>(), "");
44*decf22e5SEric Fiselier 
45*decf22e5SEric Fiselier 
46*decf22e5SEric Fiselier int main() {
47*decf22e5SEric Fiselier 
48*decf22e5SEric Fiselier }
49