mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-20 08:20:28 +08:00
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:
parent
a0dc5e4ac9
commit
a4bd198cee
@ -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.
|
||||
|
||||
|
@ -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. */
|
||||
|
@ -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>
|
||||
|
16
gcc/testsuite/g++.dg/lookup/koenig13.C
Normal file
16
gcc/testsuite/g++.dg/lookup/koenig13.C
Normal 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
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user