xref: /llvm-project/clang-tools-extra/test/clang-tidy/checkers/google/overloaded-unary-and.cpp (revision 89a1d03e2b379e325daa5249411e414bbd995b5e)
1*89a1d03eSRichard // RUN: %check_clang_tidy %s google-runtime-operator %t
2*89a1d03eSRichard 
3*89a1d03eSRichard struct Foo {
4*89a1d03eSRichard   void *operator&();
5*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: do not overload unary operator&, it is dangerous. [google-runtime-operator]
6*89a1d03eSRichard };
7*89a1d03eSRichard 
8*89a1d03eSRichard template <typename T>
9*89a1d03eSRichard struct TFoo {
10*89a1d03eSRichard   T *operator&();
11*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: do not overload unary operator&
12*89a1d03eSRichard };
13*89a1d03eSRichard 
14*89a1d03eSRichard TFoo<int> tfoo;
15*89a1d03eSRichard 
16*89a1d03eSRichard struct Bar;
17*89a1d03eSRichard void *operator&(Bar &b);
18*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:1: warning: do not overload unary operator&
19*89a1d03eSRichard 
20*89a1d03eSRichard // No warnings on binary operators.
21*89a1d03eSRichard struct Qux {
22*89a1d03eSRichard   void *operator&(Qux &q);
23*89a1d03eSRichard };
24*89a1d03eSRichard 
25*89a1d03eSRichard void *operator&(Qux &q, Qux &r);
26