DR 2007
	* call.c (build_new_op_1): Don't do non-class lookup for =, -> or [].

From-SVN: r217275
This commit is contained in:
Jason Merrill 2014-11-10 00:00:00 -05:00 committed by Jason Merrill
parent 9ab4c07add
commit e19264356f
3 changed files with 29 additions and 4 deletions

View File

@ -1,3 +1,8 @@
2014-11-09 Jason Merrill <jason@redhat.com>
DR 2007
* call.c (build_new_op_1): Don't do non-class lookup for =, -> or [].
2014-11-07 Jason Merrill <jason@redhat.com>
DR 1558

View File

@ -5309,6 +5309,7 @@ build_new_op_1 (location_t loc, enum tree_code code, int flags, tree arg1,
arg1 = prep_operand (arg1);
bool memonly = false;
switch (code)
{
case NEW_EXPR:
@ -5340,6 +5341,16 @@ build_new_op_1 (location_t loc, enum tree_code code, int flags, tree arg1,
code_orig_arg1 = TREE_CODE (TREE_TYPE (arg1));
code_orig_arg2 = TREE_CODE (TREE_TYPE (arg2));
break;
/* =, ->, [], () must be non-static member functions. */
case MODIFY_EXPR:
if (code2 != NOP_EXPR)
break;
case COMPONENT_REF:
case ARRAY_REF:
memonly = true;
break;
default:
break;
}
@ -5369,10 +5380,12 @@ build_new_op_1 (location_t loc, enum tree_code code, int flags, tree arg1,
/* Add namespace-scope operators to the list of functions to
consider. */
add_candidates (lookup_function_nonclass (fnname, arglist, /*block_p=*/true),
NULL_TREE, arglist, NULL_TREE,
NULL_TREE, false, NULL_TREE, NULL_TREE,
flags, &candidates, complain);
if (!memonly)
add_candidates (lookup_function_nonclass (fnname, arglist,
/*block_p=*/true),
NULL_TREE, arglist, NULL_TREE,
NULL_TREE, false, NULL_TREE, NULL_TREE,
flags, &candidates, complain);
args[0] = arg1;
args[1] = arg2;

View File

@ -0,0 +1,7 @@
// DR 2007
// We shouldn't instantiate A<void> to lookup operator=, since operator=
// must be a non-static member function.
template<typename T> struct A { typename T::error e; };
template<typename T> struct B { };
B<A<void> > b1, &b2 = (b1 = b1);