1 // RUN: %check_clang_tidy -std=c++20-or-later %s bugprone-forwarding-reference-overload %t 2 3 template <typename T> constexpr bool just_true = true; 4 5 class Test { 6 public: 7 template <typename T> Test(T &&n); 8 // CHECK-NOTES: :[[@LINE-1]]:25: warning: constructor accepting a forwarding reference can hide the copy and move constructors 9 10 Test(const Test &rhs); 11 // CHECK-NOTES: :[[@LINE-1]]:3: note: copy constructor declared here 12 }; 13 14 class Test1 { 15 public: 16 // Guarded with requires expression. 17 template <typename T> 18 requires requires { just_true<T>; } 19 Test1(T &&n); 20 }; 21 22 template<typename T> 23 concept JustTrueConcept = requires { just_true<T>; }; 24 25 class Test2 { 26 public: 27 // Guarded with concept requirement. 28 template <JustTrueConcept T> Test2(T &&n); 29 }; 30