1 // RUN: %check_clang_tidy -std=c++17-or-later %s fuchsia-trailing-return %t
2
add_one(const int arg)3 int add_one(const int arg) { return arg; }
4
get_add_one()5 auto get_add_one() -> int (*)(const int) {
6 // CHECK-MESSAGES: [[@LINE-1]]:1: warning: a trailing return type is disallowed for this function declaration
7 // CHECK-NEXT: auto get_add_one() -> int (*)(const int) {
8 return add_one;
9 }
10
__anon217685100102(double x, double y) 11 auto lambda = [](double x, double y) {return x + y;};
12
__anon217685100202(double x, double y) 13 auto lambda2 = [](double x, double y) -> double {return x + y;};
14
main()15 int main() {
16 get_add_one()(5);
17 return 0;
18 }
19
20 template <typename T1, typename T2>
fn(const T1 & lhs,const T2 & rhs)21 auto fn(const T1 &lhs, const T2 &rhs) -> decltype(lhs + rhs) {
22 return lhs + rhs;
23 }
24
25 // Now check that implicit and explicit C++17 deduction guides don't trigger this warning (PR#47614).
26
27 template <typename T>
28 struct ImplicitDeductionGuides {
29 ImplicitDeductionGuides(const T &);
30 };
31
32 template <typename A, typename B>
33 struct pair {
34 A first;
35 B second;
36 };
37
38 template <typename T>
39 struct UserDefinedDeductionGuides {
40 UserDefinedDeductionGuides(T);
41 template <typename T1, typename T2>
42 UserDefinedDeductionGuides(T1, T2);
43 };
44
45 template <typename T1, typename T2>
46 UserDefinedDeductionGuides(T1, T2) -> UserDefinedDeductionGuides<pair<T1, T2>>;
47
foo()48 void foo() {
49 ImplicitDeductionGuides X(42);
50 UserDefinedDeductionGuides s(1, "abc");
51 }
52