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