ExprResult Sema::BuildCXXNoexceptExpr(SourceLocation KeyLoc, Expr *Operand,
SourceLocation RParen) {
+ // If the operand is an unresolved lookup expression, the expression is ill-
+ // formed per [over.over]p1, because overloaded function names cannot be used
+ // without arguments except in explicit contexts.
+ ExprResult R = CheckPlaceholderExpr(Operand);
+ if (R.isInvalid())
+ return R;
+
+ // The operand may have been modified when checking the placeholder type.
+ Operand = R.get();
+
if (ActiveTemplateInstantiations.empty() &&
Operand->HasSideEffects(Context, false)) {
// The expression operand for noexcept is in an unevaluated expression
--- /dev/null
+// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s\r
+\r
+void f(); // expected-note {{possible target for call}}\r
+void f(int); // expected-note {{possible target for call}}\r
+\r
+void g() {\r
+ bool b = noexcept(f); // expected-error {{reference to overloaded function could not be resolved; did you mean to call it with no arguments?}}\r
+ bool b2 = noexcept(f(0));\r
+}\r
+\r
+struct S {\r
+ void g(); // expected-note {{possible target for call}}\r
+ void g(int); // expected-note {{possible target for call}}\r
+\r
+ void h() {\r
+ bool b = noexcept(this->g); // expected-error {{reference to non-static member function must be called; did you mean to call it with no arguments?}}\r
+ bool b2 = noexcept(this->g(0));\r
+ }\r
+};\r