1 | //===----------------------------------------------------------------------===// |
2 | // |
3 | // 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 |
6 | // |
7 | //===----------------------------------------------------------------------===// |
8 | |
9 | // UNSUPPORTED: c++98, c++03, c++11, c++14 |
10 | |
11 | // <functional> |
12 | |
13 | // Make sure that we can use CTAD with operations in <functional> |
14 | |
15 | #include <functional> |
16 | |
17 | #include "test_macros.h" |
18 | |
19 | int main(int, char**) { |
20 | { |
21 | std::plus f; |
22 | ASSERT_SAME_TYPE(decltype(f), std::plus<>); |
23 | } |
24 | { |
25 | std::minus f; |
26 | ASSERT_SAME_TYPE(decltype(f), std::minus<>); |
27 | } |
28 | { |
29 | std::multiplies f; |
30 | ASSERT_SAME_TYPE(decltype(f), std::multiplies<>); |
31 | } |
32 | { |
33 | std::divides f; |
34 | ASSERT_SAME_TYPE(decltype(f), std::divides<>); |
35 | } |
36 | { |
37 | std::modulus f; |
38 | ASSERT_SAME_TYPE(decltype(f), std::modulus<>); |
39 | } |
40 | { |
41 | std::negate f; |
42 | ASSERT_SAME_TYPE(decltype(f), std::negate<>); |
43 | } |
44 | { |
45 | std::bit_and f; |
46 | ASSERT_SAME_TYPE(decltype(f), std::bit_and<>); |
47 | } |
48 | { |
49 | std::bit_not f; |
50 | ASSERT_SAME_TYPE(decltype(f), std::bit_not<>); |
51 | } |
52 | { |
53 | std::bit_or f; |
54 | ASSERT_SAME_TYPE(decltype(f), std::bit_or<>); |
55 | } |
56 | { |
57 | std::bit_xor f; |
58 | ASSERT_SAME_TYPE(decltype(f), std::bit_xor<>); |
59 | } |
60 | { |
61 | std::equal_to f; |
62 | ASSERT_SAME_TYPE(decltype(f), std::equal_to<>); |
63 | } |
64 | { |
65 | std::not_equal_to f; |
66 | ASSERT_SAME_TYPE(decltype(f), std::not_equal_to<>); |
67 | } |
68 | { |
69 | std::less f; |
70 | ASSERT_SAME_TYPE(decltype(f), std::less<>); |
71 | } |
72 | { |
73 | std::less_equal f; |
74 | ASSERT_SAME_TYPE(decltype(f), std::less_equal<>); |
75 | } |
76 | { |
77 | std::greater_equal f; |
78 | ASSERT_SAME_TYPE(decltype(f), std::greater_equal<>); |
79 | } |
80 | { |
81 | std::greater f; |
82 | ASSERT_SAME_TYPE(decltype(f), std::greater<>); |
83 | } |
84 | { |
85 | std::logical_and f; |
86 | ASSERT_SAME_TYPE(decltype(f), std::logical_and<>); |
87 | } |
88 | { |
89 | std::logical_not f; |
90 | ASSERT_SAME_TYPE(decltype(f), std::logical_not<>); |
91 | } |
92 | { |
93 | std::logical_or f; |
94 | ASSERT_SAME_TYPE(decltype(f), std::logical_or<>); |
95 | } |
96 | |
97 | return 0; |
98 | } |
99 | |