https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70610

--- Comment #2 from Patrick Palka <ppalka at gcc dot gnu.org> ---
This general issue about the unconditional lvalue-ness of NON_DEPENDENT_EXPR
existed before my patch for PR c++/21802 though.  For example, ere's a test
case that should compile cleanly but doesn't since at least g++ 4.4 (-std=c++98
is required) for basically the same reason:

struct A { };

void operator+ (const A &, A &);
void operator+ (A &, const A &);
void operator+ (const A &, const A &);

template <typename T>
void
foo ()
{
  A () + A ();
}

unary_plus.C: In function ‘void foo()’:
unary_plus.C:11:8: error: ambiguous overload for ‘operator+’ (operand types are
‘A’ and ‘A’)
   A () + A ();
   ~~~~~^~~~~~
unary_plus.C:3:6: note: candidate: void operator+(const A&, A&)
 void operator+ (const A &, A &);
      ^~~~~~~~
unary_plus.C:4:6: note: candidate: void operator+(A&, const A&)
 void operator+ (A &, const A &);
      ^~~~~~~~
unary_plus.C:5:6: note: candidate: void operator+(const A&, const A&)
 void operator+ (const A &, const A &);
      ^~~~~~~~

Reply via email to