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