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