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