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