// RUN: %clang_cc1 -fsyntax-only -verify %s // PR clang/3175 void bar(int*); class c { int var; static int svar; void foo() { bar(&var); bar(&svar); } static void wibble() { bar(&var); // expected-error{{invalid use of member 'var' in static member function}} bar(&svar); } }; enum E { Enumerator }; void test() { (void)&Enumerator; // expected-error{{cannot take the address of an rvalue of type 'E'}} } template<int N> void test2() { (void)&N; // expected-error{{cannot take the address of an rvalue of type 'int'}} } // PR clang/3222 void xpto(); void (*xyz)(void) = &xpto; struct PR11066 { static int foo(short); static int foo(float); void test(); }; void PR11066::test() { int (PR11066::*ptr)(int) = & &PR11066::foo; // expected-error{{extra '&' taking address of overloaded function}} } namespace test3 { // emit no error template<typename T> struct S { virtual void f() = 0; }; template<typename T> void S<T>::f() { T::error; } void (S<int>::*p)() = &S<int>::f; }