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
9namespace std {
10
11void __f() {}
12
13void 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();{{$}}
16struct 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 {};{{$}}
19struct 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 {};{{$}}
22struct _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
26template <class _Tp>
27class reference_wrapper {
28public:
29 typedef _Tp type;
30
31private:
32 type *__f_;
33
34public:
35 reference_wrapper(type &__f)
36 : __f_(&__f) {}
37 // access
38 operator type &() const { return *__f_; }
39 type &get() const { return *__f_; }
40};
41
42template <class _Tp>
43inline reference_wrapper<_Tp>
44ref(_Tp &__t) noexcept {
45 return reference_wrapper<_Tp>(__t);
46}
47
48template <class _Tp>
49inline reference_wrapper<_Tp>
50ref(reference_wrapper<_Tp> __t) noexcept {
51 return ref(__t.get());
52}
53
54template <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>{{$}}
57inline reference_wrapper<const Up>
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
64template <class _Tp>
65inline reference_wrapper<_Tp>
66cref(reference_wrapper<const _Tp> __t) noexcept {
67 return cref(__t.get());
68}
69
70} // namespace std
71

source code of clang-tools-extra/test/clang-tidy/checkers/bugprone/reserved-identifier-invert.cpp