blob: b1f1fe65667f8b5fd24a0126bd8de7d2d7e69c37 [file] [log] [blame]
Howard Hinnant94b2dd02010-08-22 00:59:46 +00001//===----------------------------------------------------------------------===//
2//
Chandler Carruth57b08b02019-01-19 10:56:40 +00003// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
Howard Hinnant94b2dd02010-08-22 00:59:46 +00006//
7//===----------------------------------------------------------------------===//
8
9// <functional>
10
11// greater
12
13#include <functional>
14#include <type_traits>
15#include <cassert>
16
Eric Fiselierd697ee42016-06-02 03:12:44 +000017#include "test_macros.h"
Nico Weber0f3efc42019-08-21 22:38:38 +000018#include "pointer_comparison_test_helper.h"
Eric Fiselierd697ee42016-06-02 03:12:44 +000019
JF Bastien2df59c52019-02-04 20:31:13 +000020int main(int, char**)
Howard Hinnant94b2dd02010-08-22 00:59:46 +000021{
22 typedef std::greater<int> F;
23 const F f = F();
Marshall Clow66369c02015-01-07 20:31:06 +000024 static_assert((std::is_same<int, F::first_argument_type>::value), "" );
25 static_assert((std::is_same<int, F::second_argument_type>::value), "" );
26 static_assert((std::is_same<bool, F::result_type>::value), "" );
Howard Hinnant94b2dd02010-08-22 00:59:46 +000027 assert(!f(36, 36));
28 assert(f(36, 6));
29 assert(!f(6, 36));
Eric Fiselierd697ee42016-06-02 03:12:44 +000030 {
31 // test total ordering of int* for greater<int*> and
32 // greater<void>.
33 do_pointer_comparison_test<int, std::greater>();
34 }
35#if TEST_STD_VER > 11
Marshall Clow83c08b42013-07-29 14:21:53 +000036 typedef std::greater<> F2;
37 const F2 f2 = F2();
38 assert(!f2(36, 36));
39 assert(f2(36, 6));
40 assert(!f2(6, 36));
41 assert( f2(36, 6.0));
42 assert( f2(36.0, 6));
43 assert(!f2(6, 36.0));
44 assert(!f2(6.0, 36));
Marshall Clow3d5134dd2013-09-28 19:06:12 +000045
46 constexpr bool foo = std::greater<int> () (36, 36);
47 static_assert ( !foo, "" );
48
49 constexpr bool bar = std::greater<> () (36.0, 36);
50 static_assert ( !bar, "" );
Marshall Clow83c08b42013-07-29 14:21:53 +000051#endif
JF Bastien2df59c52019-02-04 20:31:13 +000052
53 return 0;
Howard Hinnant94b2dd02010-08-22 00:59:46 +000054}