xref: /llvm-project/libcxx/test/std/utilities/function.objects/operations.implicit_ctad.pass.cpp (revision f98a3dd7a23ca1a85f62b38a2a7e82a53f80070b)
1c2df7076SLouis Dionne //===----------------------------------------------------------------------===//
2c2df7076SLouis Dionne //
3c2df7076SLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4c2df7076SLouis Dionne // See https://llvm.org/LICENSE.txt for license information.
5c2df7076SLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6c2df7076SLouis Dionne //
7c2df7076SLouis Dionne //===----------------------------------------------------------------------===//
8c2df7076SLouis Dionne 
9*f98a3dd7SMark de Wever // UNSUPPORTED: c++03, c++11, c++14
10c2df7076SLouis Dionne 
11c2df7076SLouis Dionne // <functional>
12c2df7076SLouis Dionne 
13c2df7076SLouis Dionne // Make sure that we can use CTAD with operations in <functional>
14c2df7076SLouis Dionne 
15c2df7076SLouis Dionne #include <functional>
16c2df7076SLouis Dionne 
17c2df7076SLouis Dionne #include "test_macros.h"
18c2df7076SLouis Dionne 
main(int,char **)19c2df7076SLouis Dionne int main(int, char**) {
20c2df7076SLouis Dionne     {
21c2df7076SLouis Dionne         std::plus f;
22c2df7076SLouis Dionne         ASSERT_SAME_TYPE(decltype(f), std::plus<>);
23c2df7076SLouis Dionne     }
24c2df7076SLouis Dionne     {
25c2df7076SLouis Dionne         std::minus f;
26c2df7076SLouis Dionne         ASSERT_SAME_TYPE(decltype(f), std::minus<>);
27c2df7076SLouis Dionne     }
28c2df7076SLouis Dionne     {
29c2df7076SLouis Dionne         std::multiplies f;
30c2df7076SLouis Dionne         ASSERT_SAME_TYPE(decltype(f), std::multiplies<>);
31c2df7076SLouis Dionne     }
32c2df7076SLouis Dionne     {
33c2df7076SLouis Dionne         std::divides f;
34c2df7076SLouis Dionne         ASSERT_SAME_TYPE(decltype(f), std::divides<>);
35c2df7076SLouis Dionne     }
36c2df7076SLouis Dionne     {
37c2df7076SLouis Dionne         std::modulus f;
38c2df7076SLouis Dionne         ASSERT_SAME_TYPE(decltype(f), std::modulus<>);
39c2df7076SLouis Dionne     }
40c2df7076SLouis Dionne     {
41c2df7076SLouis Dionne         std::negate f;
42c2df7076SLouis Dionne         ASSERT_SAME_TYPE(decltype(f), std::negate<>);
43c2df7076SLouis Dionne     }
44c2df7076SLouis Dionne     {
45c2df7076SLouis Dionne         std::bit_and f;
46c2df7076SLouis Dionne         ASSERT_SAME_TYPE(decltype(f), std::bit_and<>);
47c2df7076SLouis Dionne     }
48c2df7076SLouis Dionne     {
49c2df7076SLouis Dionne         std::bit_not f;
50c2df7076SLouis Dionne         ASSERT_SAME_TYPE(decltype(f), std::bit_not<>);
51c2df7076SLouis Dionne     }
52c2df7076SLouis Dionne     {
53c2df7076SLouis Dionne         std::bit_or f;
54c2df7076SLouis Dionne         ASSERT_SAME_TYPE(decltype(f), std::bit_or<>);
55c2df7076SLouis Dionne     }
56c2df7076SLouis Dionne     {
57c2df7076SLouis Dionne         std::bit_xor f;
58c2df7076SLouis Dionne         ASSERT_SAME_TYPE(decltype(f), std::bit_xor<>);
59c2df7076SLouis Dionne     }
60c2df7076SLouis Dionne     {
61c2df7076SLouis Dionne         std::equal_to f;
62c2df7076SLouis Dionne         ASSERT_SAME_TYPE(decltype(f), std::equal_to<>);
63c2df7076SLouis Dionne     }
64c2df7076SLouis Dionne     {
65c2df7076SLouis Dionne         std::not_equal_to f;
66c2df7076SLouis Dionne         ASSERT_SAME_TYPE(decltype(f), std::not_equal_to<>);
67c2df7076SLouis Dionne     }
68c2df7076SLouis Dionne     {
69c2df7076SLouis Dionne         std::less f;
70c2df7076SLouis Dionne         ASSERT_SAME_TYPE(decltype(f), std::less<>);
71c2df7076SLouis Dionne     }
72c2df7076SLouis Dionne     {
73c2df7076SLouis Dionne         std::less_equal f;
74c2df7076SLouis Dionne         ASSERT_SAME_TYPE(decltype(f), std::less_equal<>);
75c2df7076SLouis Dionne     }
76c2df7076SLouis Dionne     {
77c2df7076SLouis Dionne         std::greater_equal f;
78c2df7076SLouis Dionne         ASSERT_SAME_TYPE(decltype(f), std::greater_equal<>);
79c2df7076SLouis Dionne     }
80c2df7076SLouis Dionne     {
81c2df7076SLouis Dionne         std::greater f;
82c2df7076SLouis Dionne         ASSERT_SAME_TYPE(decltype(f), std::greater<>);
83c2df7076SLouis Dionne     }
84c2df7076SLouis Dionne     {
85c2df7076SLouis Dionne         std::logical_and f;
86c2df7076SLouis Dionne         ASSERT_SAME_TYPE(decltype(f), std::logical_and<>);
87c2df7076SLouis Dionne     }
88c2df7076SLouis Dionne     {
89c2df7076SLouis Dionne         std::logical_not f;
90c2df7076SLouis Dionne         ASSERT_SAME_TYPE(decltype(f), std::logical_not<>);
91c2df7076SLouis Dionne     }
92c2df7076SLouis Dionne     {
93c2df7076SLouis Dionne         std::logical_or f;
94c2df7076SLouis Dionne         ASSERT_SAME_TYPE(decltype(f), std::logical_or<>);
95c2df7076SLouis Dionne     }
96c2df7076SLouis Dionne 
97c2df7076SLouis Dionne     return 0;
98c2df7076SLouis Dionne }
99