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