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