re PR c++/42687 (The prevention of ADL with the help of parentheses doesn't work)

PR c++/42687
	* parser.c (cp_parser_primary_expression): Set *idk to
	CP_ID_KIND_NONE for a parenthesized identifier.

From-SVN: r173007
This commit is contained in:
Jason Merrill 2011-04-27 01:17:20 -04:00 committed by Jason Merrill
parent a0dc5e4ac9
commit a4bd198cee
4 changed files with 28 additions and 0 deletions

View File

@ -1,5 +1,9 @@
2011-04-26 Jason Merrill <jason@redhat.com>
PR c++/42687
* parser.c (cp_parser_primary_expression): Set *idk to
CP_ID_KIND_NONE for a parenthesized identifier.
* ptree.c (cxx_print_type) [TYPENAME_TYPE]: Dump fullname.
(cxx_print_identifier): Correct indentation.

View File

@ -3437,6 +3437,12 @@ cp_parser_primary_expression (cp_parser *parser,
`&A::B' might be a pointer-to-member, but `&(A::B)' is
not. */
finish_parenthesized_expr (expr);
/* DR 705: Wrapping an unqualified name in parentheses
suppresses arg-dependent lookup. We want to pass back
CP_ID_KIND_QUALIFIED for suppressing vtable lookup
(c++/37862), but none of the others. */
if (*idk != CP_ID_KIND_QUALIFIED)
*idk = CP_ID_KIND_NONE;
}
/* The `>' token might be the end of a template-id or
template-parameter-list now. */

View File

@ -1,5 +1,7 @@
2011-04-26 Jason Merrill <jason@redhat.com>
* g++.dg/lookup/koenig13.C: New.
* g++.dg/cpp0x/initlist48.C: New.
2011-04-25 Jason Merrill <jason@redhat.com>

View File

@ -0,0 +1,16 @@
// PR c++/42687
// DR 705
namespace N
{
struct S { };
void f(const S &) { }
}
void f(const N::S &) { }
int main()
{
N::S v;
(f)(v); // no ambiguity: ADL is prevented with (), only ::f is considered
}