1
1
#include < functional>
2
2
#include < type_traits>
3
3
4
- void check_return_type_are_correct ();
5
4
void check_forward ();
6
5
void check_raii ();
7
6
void check_noexcept_spec ();
8
7
9
8
struct Widget {};
10
- bool test (int ) => true;
11
- bool test (Widget) => false;
9
+ auto test (int ) => true;
10
+ auto test (Widget) => false;
12
11
void invoke (std::function<bool (int )>) {}
13
12
void invoke (std::function<bool (std::string)>) {}
14
13
15
14
template <class T >
16
- constexpr bool is_rvalue_ref (T&&) => std::is_rvalue_reference_v<T&&>;
15
+ constexpr auto is_rvalue_ref (T&&) => std::is_rvalue_reference_v<T&&>;
17
16
18
- int && f(int && x) noexcept ( true ) => (>>x);
17
+ auto f (int && x) => (>>x);
19
18
20
19
int main ()
21
20
{
@@ -26,7 +25,6 @@ int main()
26
25
27
26
check_raii ();
28
27
check_forward ();
29
- check_return_type_are_correct ();
30
28
check_noexcept_spec ();
31
29
}
32
30
@@ -56,51 +54,6 @@ void check_optional_type_for_parameter()
56
54
[](x...) { static_assert ((is_rvalue_ref (>>x) && ...)); }(42 );
57
55
}
58
56
59
- template <class T > constexpr auto func_1 (T&& x) => (>>x);
60
- template <class T > constexpr auto func_2 (T&& x) -> decltype((>>x)) => (>>x);
61
- template <class T > constexpr auto func_3 (T&& x) => (x);
62
- template <class T > constexpr auto func_4 (T&& x) -> decltype((x)) => (x);
63
-
64
- void check_return_type_are_correct ()
65
- {
66
- int i = 0 , &&v = 0 ;
67
-
68
- constexpr auto make_is_same = []<class L , class R >(L&&, R&&) {
69
- static_assert (std::is_same_v<L, R>);
70
- };
71
- constexpr auto lambda_1 = []<class T >(T&& x) => (>>x);
72
- constexpr auto lambda_2 = []<class T >(T&& x) -> decltype ((>>x)) => (>>x);
73
- constexpr auto lambda_3 = []<class T >(T&& x) => (x);
74
- constexpr auto lambda_4 = []<class T >(T&& x) -> decltype ((x)) => (x);
75
-
76
- #define SAME_F (funcA, funcB, args... ) \
77
- make_is_same (funcA (args), funcB (args))
78
-
79
- SAME_F (lambda_1, lambda_2, 42 );
80
- SAME_F (lambda_1, lambda_2, i);
81
- SAME_F (lambda_1, lambda_2, v);
82
- SAME_F (lambda_1, lambda_2, >>i);
83
- SAME_F (lambda_1, lambda_2, >>v);
84
-
85
- SAME_F (lambda_3, lambda_4, 42 );
86
- SAME_F (lambda_3, lambda_4, i);
87
- SAME_F (lambda_3, lambda_4, v);
88
- SAME_F (lambda_3, lambda_4, >>i);
89
- SAME_F (lambda_3, lambda_4, >>v);
90
-
91
- SAME_F (func_1, func_2, 42 );
92
- SAME_F (func_1, func_2, i);
93
- SAME_F (func_1, func_2, v);
94
- SAME_F (func_1, func_2, >>i);
95
- SAME_F (func_1, func_2, >>v);
96
-
97
- SAME_F (func_3, func_4, 42 );
98
- SAME_F (func_3, func_4, i);
99
- SAME_F (func_3, func_4, v);
100
- SAME_F (func_3, func_4, >>i);
101
- SAME_F (func_3, func_4, >>v);
102
- }
103
-
104
57
void check_noexcept_spec ()
105
58
{
106
59
auto excepts = []<class T >(T&&) noexcept (false ) { throw 42 ; };
0 commit comments