blob: 553bf83e2d4c24b73d51e67e61381b6e5f29871e [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// negate
12
13#include <functional>
14#include <type_traits>
15#include <cassert>
16
Stephan T. Lavavej0f901c72016-11-04 20:26:59 +000017#include "test_macros.h"
18
JF Bastien2df59c52019-02-04 20:31:13 +000019int main(int, char**)
Howard Hinnant94b2dd02010-08-22 00:59:46 +000020{
21 typedef std::negate<int> F;
22 const F f = F();
Marshall Clow601fa8d2015-01-07 21:51:30 +000023 static_assert((std::is_same<F::argument_type, int>::value), "" );
24 static_assert((std::is_same<F::result_type, int>::value), "" );
Howard Hinnant94b2dd02010-08-22 00:59:46 +000025 assert(f(36) == -36);
Stephan T. Lavavej0f901c72016-11-04 20:26:59 +000026#if TEST_STD_VER > 11
Marshall Clow83c08b42013-07-29 14:21:53 +000027 typedef std::negate<> F2;
28 const F2 f2 = F2();
29 assert(f2(36) == -36);
30 assert(f2(36L) == -36);
31 assert(f2(36.0) == -36);
Marshall Clow3d5134dd2013-09-28 19:06:12 +000032
33 constexpr int foo = std::negate<int> () (3);
34 static_assert ( foo == -3, "" );
35
Stephan T. Lavavejc255fa52016-12-08 21:38:01 +000036 constexpr double bar = std::negate<> () (3.0);
37 static_assert ( bar == -3.0, "" );
Marshall Clow83c08b42013-07-29 14:21:53 +000038#endif
JF Bastien2df59c52019-02-04 20:31:13 +000039
40 return 0;
Howard Hinnant94b2dd02010-08-22 00:59:46 +000041}