1 // RUN: %check_clang_tidy %s bugprone-reserved-identifier %t -- \ 2 // RUN: -config='{CheckOptions: { \ 3 // RUN: bugprone-reserved-identifier.Invert: true, \ 4 // RUN: bugprone-reserved-identifier.AllowedIdentifiers: "std;reference_wrapper;ref;^c?ref;type;get" \ 5 // RUN: }}' -- \ 6 // RUN: -I%S/Inputs/reserved-identifier \ 7 // RUN: -isystem %S/Inputs/reserved-identifier/system 8 9 namespace std { 10 __f()11void __f() {} 12 13 void f(); 14 // CHECK-MESSAGES: :[[@LINE-1]]:6: warning: declaration uses identifier 'f', which is not a reserved identifier [bugprone-reserved-identifier] 15 // CHECK-FIXES: {{^}}void __f();{{$}} 16 struct helper {}; 17 // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: declaration uses identifier 'helper', which is not a reserved identifier [bugprone-reserved-identifier] 18 // CHECK-FIXES: {{^}}struct __helper {};{{$}} 19 struct Helper {}; 20 // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: declaration uses identifier 'Helper', which is not a reserved identifier [bugprone-reserved-identifier] 21 // CHECK-FIXES: {{^}}struct _Helper {};{{$}} 22 struct _helper2 {}; 23 // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: declaration uses identifier '_helper2', which is not a reserved identifier [bugprone-reserved-identifier] 24 // CHECK-FIXES: {{^}}struct __helper2 {};{{$}} 25 26 template <class _Tp> 27 class reference_wrapper { 28 public: 29 typedef _Tp type; 30 31 private: 32 type *__f_; 33 34 public: reference_wrapper(type & __f)35 reference_wrapper(type &__f) 36 : __f_(&__f) {} 37 // access operator type&() const38 operator type &() const { return *__f_; } get() const39 type &get() const { return *__f_; } 40 }; 41 42 template <class _Tp> 43 inline reference_wrapper<_Tp> ref(_Tp & __t)44ref(_Tp &__t) noexcept { 45 return reference_wrapper<_Tp>(__t); 46 } 47 48 template <class _Tp> 49 inline reference_wrapper<_Tp> ref(reference_wrapper<_Tp> __t)50ref(reference_wrapper<_Tp> __t) noexcept { 51 return ref(__t.get()); 52 } 53 54 template <class Up> 55 // CHECK-MESSAGES: :[[@LINE-1]]:17: warning: declaration uses identifier 'Up', which is not a reserved identifier [bugprone-reserved-identifier] 56 // CHECK-FIXES: {{^}}template <class _Up>{{$}} 57 inline reference_wrapper<const Up> cref(const Up & u)58cref(const Up &u) noexcept { 59 // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: declaration uses identifier 'u', which is not a reserved identifier [bugprone-reserved-identifier] 60 // CHECK-FIXES: {{^}}cref(const _Up &__u) noexcept {{{$}} 61 return reference_wrapper<const Up>(u); 62 } 63 64 template <class _Tp> 65 inline reference_wrapper<_Tp> cref(reference_wrapper<const _Tp> __t)66cref(reference_wrapper<const _Tp> __t) noexcept { 67 return cref(__t.get()); 68 } 69 70 } // namespace std 71