15a83710eSEric Fiselier //===----------------------------------------------------------------------===// 25a83710eSEric Fiselier // 35a83710eSEric Fiselier // The LLVM Compiler Infrastructure 45a83710eSEric Fiselier // 55a83710eSEric Fiselier // This file is dual licensed under the MIT and the University of Illinois Open 65a83710eSEric Fiselier // Source Licenses. See LICENSE.TXT for details. 75a83710eSEric Fiselier // 85a83710eSEric Fiselier //===----------------------------------------------------------------------===// 95a83710eSEric Fiselier 105a83710eSEric Fiselier // <functional> 115a83710eSEric Fiselier 125a83710eSEric Fiselier // less 135a83710eSEric Fiselier 145a83710eSEric Fiselier #include <functional> 155a83710eSEric Fiselier #include <type_traits> 165a83710eSEric Fiselier #include <cassert> 175a83710eSEric Fiselier 18*d697ee41SEric Fiselier #include "test_macros.h" 19*d697ee41SEric Fiselier #include "pointer_comparison_test_helper.hpp" 20*d697ee41SEric Fiselier 215a83710eSEric Fiselier int main() 225a83710eSEric Fiselier { 235a83710eSEric Fiselier typedef std::less<int> F; 245a83710eSEric Fiselier const F f = F(); 259570e7b0SMarshall Clow static_assert((std::is_same<int, F::first_argument_type>::value), "" ); 269570e7b0SMarshall Clow static_assert((std::is_same<int, F::second_argument_type>::value), "" ); 279570e7b0SMarshall Clow static_assert((std::is_same<bool, F::result_type>::value), "" ); 285a83710eSEric Fiselier assert(!f(36, 36)); 295a83710eSEric Fiselier assert(!f(36, 6)); 305a83710eSEric Fiselier assert(f(6, 36)); 31*d697ee41SEric Fiselier { 32*d697ee41SEric Fiselier // test total ordering of int* for less<int*> and less<void>. 33*d697ee41SEric Fiselier do_pointer_comparison_test<int, std::less>(); 34*d697ee41SEric Fiselier } 35*d697ee41SEric Fiselier #if TEST_STD_VER > 11 365a83710eSEric Fiselier typedef std::less<> F2; 375a83710eSEric Fiselier const F2 f2 = F2(); 385a83710eSEric Fiselier assert(!f2(36, 36)); 395a83710eSEric Fiselier assert(!f2(36, 6)); 405a83710eSEric Fiselier assert( f2(6, 36)); 415a83710eSEric Fiselier assert(!f2(36, 6.0)); 425a83710eSEric Fiselier assert(!f2(36.0, 6)); 435a83710eSEric Fiselier assert( f2(6, 36.0)); 445a83710eSEric Fiselier assert( f2(6.0, 36)); 455a83710eSEric Fiselier 465a83710eSEric Fiselier constexpr bool foo = std::less<int> () (36, 36); 475a83710eSEric Fiselier static_assert ( !foo, "" ); 485a83710eSEric Fiselier 495a83710eSEric Fiselier constexpr bool bar = std::less<> () (36.0, 36); 505a83710eSEric Fiselier static_assert ( !bar, "" ); 515a83710eSEric Fiselier #endif 525a83710eSEric Fiselier } 53