// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++11 struct S { int NoArgs(); int OneArg(int); template T TemplNoArgs(); // expected-note {{possible target for call}} // expected-note {{possible target for call}} template T TemplOneArg(T); // expected-note {{possible target for call}} // expected-note {{possible target for call}} void* operator new(__SIZE_TYPE__, int); }; S* GetS(); int test() { S s, *ps = GetS(); int (S::*pNoArgs)() = &S::NoArgs; int (S::*pOneArg)(int) = &S::OneArg; int (S::*pTemplNoArgs)() = &S::TemplNoArgs; int (S::*pTemplOneArg)(int) = &S::TemplOneArg; new (s.NoArgs()) S; new (s.OneArg(1)) S; new (ps->NoArgs()) S; new (ps->OneArg(1)) S; new ((s.*pNoArgs)()) S; new ((s.*pOneArg)(1)) S; new ((ps->*pNoArgs)()) S; new ((ps->*pOneArg)(1)) S; new (s.TemplNoArgs()) S; new (s.TemplOneArg(1)) S; new (ps->TemplNoArgs()) S; new (ps->TemplOneArg(1)) S; new ((s.*pTemplNoArgs)()) S; new ((s.*pTemplOneArg)(1)) S; new ((ps->*pTemplNoArgs)()) S; new ((ps->*pTemplOneArg)(1)) S; new (s.NoArgs) S; // expected-error {{reference to non-static member function must be called; did you mean to call it with no arguments?}} new (s.OneArg) S; // expected-error {{reference to non-static member function must be called}} new (ps->NoArgs) S; // expected-error {{reference to non-static member function must be called; did you mean to call it with no arguments?}} new (ps->OneArg) S; // expected-error {{reference to non-static member function must be called}} new (s.*pNoArgs) S; // expected-error {{reference to non-static member function must be called; did you mean to call it with no arguments?}} new (s.*pOneArg) S; // expected-error {{reference to non-static member function must be called}} new (ps->*pNoArgs) S; // expected-error {{reference to non-static member function must be called; did you mean to call it with no arguments?}} new (ps->*pOneArg) S; // expected-error {{reference to non-static member function must be called}} new ((s.*pNoArgs)) S; // expected-error {{reference to non-static member function must be called; did you mean to call it with no arguments?}} new ((s.*pOneArg)) S; // expected-error {{reference to non-static member function must be called}} new ((ps->*pNoArgs)) S; // expected-error {{reference to non-static member function must be called; did you mean to call it with no arguments?}} new ((ps->*pOneArg)) S; // expected-error {{reference to non-static member function must be called}} new (s.TemplNoArgs) S; // expected-error {{reference to non-static member function must be called; did you mean to call it with no arguments?}} new (s.TemplOneArg) S; // expected-error {{reference to non-static member function must be called}} new (ps->TemplNoArgs) S; // expected-error {{reference to non-static member function must be called; did you mean to call it with no arguments?}} new (ps->TemplOneArg) S; // expected-error {{reference to non-static member function must be called}} new (s.*pTemplNoArgs) S; // expected-error {{reference to non-static member function must be called; did you mean to call it with no arguments?}} new (s.*pTemplOneArg) S; // expected-error {{reference to non-static member function must be called}} new (ps->*pTemplNoArgs) S; // expected-error {{reference to non-static member function must be called; did you mean to call it with no arguments?}} new (ps->*pTemplOneArg) S; // expected-error {{reference to non-static member function must be called}} new ((s.*pTemplNoArgs)) S; // expected-error {{reference to non-static member function must be called; did you mean to call it with no arguments?}} new ((s.*pTemplOneArg)) S; // expected-error {{reference to non-static member function must be called}} new ((ps->*pTemplNoArgs)) S; // expected-error {{reference to non-static member function must be called; did you mean to call it with no arguments?}} new ((ps->*pTemplOneArg)) S; // expected-error {{reference to non-static member function must be called}} }