From: Richard Smith Date: Mon, 23 Jul 2012 21:41:30 +0000 (+0000) Subject: Do not warn about a function decl / direct init ambiguity if the function has a trail... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5969a5f1b730775af4afb8f95f6c8c306ab08227;p=clang Do not warn about a function decl / direct init ambiguity if the function has a trailing return type. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@160646 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Parse/ParseTentative.cpp b/lib/Parse/ParseTentative.cpp index 41d793f3f2..8cf1c29078 100644 --- a/lib/Parse/ParseTentative.cpp +++ b/lib/Parse/ParseTentative.cpp @@ -1293,7 +1293,7 @@ bool Parser::isCXXFunctionDeclarator(bool warnIfAmbiguous) { Next.is(tok::kw_throw) || Next.is(tok::kw_noexcept) || Next.is(tok::l_square) || isCXX0XVirtSpecifier(Next) || Next.is(tok::l_brace) || Next.is(tok::kw_try) || - Next.is(tok::equal)) + Next.is(tok::equal) || Next.is(tok::arrow)) // The next token cannot appear after a constructor-style initializer, // and can appear next in a function definition. This must be a function // declarator. diff --git a/test/Parser/cxx0x-ambig.cpp b/test/Parser/cxx0x-ambig.cpp index e1e6ff76ad..96e200642b 100644 --- a/test/Parser/cxx0x-ambig.cpp +++ b/test/Parser/cxx0x-ambig.cpp @@ -85,7 +85,7 @@ namespace trailing_return { struct S { S(int); - S *operator()() const; + S *operator()(...) const; int n; }; @@ -94,7 +94,9 @@ namespace trailing_return { // This parses as a function declaration, but DR1223 makes the presence of // 'auto' be used for disambiguation. S(a)()->n; // ok, expression; expected-warning{{expression result unused}} + S(a)(int())->n; // ok, expression; expected-warning{{expression result unused}} auto(a)()->n; // ok, function declaration + auto(b)(int())->n; // ok, function declaration using T = decltype(a); using T = auto() -> n; }