re PR c++/31419 (template user defined conversion operator instantiated for conversion to self)

PR c++/31419
        * call.c (reference_binding): Don't look for user-defined conversions
        to the same type.

From-SVN: r128102
This commit is contained in:
Jason Merrill 2007-09-04 16:18:05 -04:00 committed by Jason Merrill
parent 4aeb38965b
commit 9380ed8466
3 changed files with 25 additions and 1 deletions

View File

@ -1,5 +1,9 @@
2007-09-04 Jason Merrill <jason@redhat.com>
PR c++/31419
* call.c (reference_binding): Don't look for user-defined conversions
to the same type.
PR c++/31411
* except.c (initialize_handler_parm): Put a CLEANUP_POINT_EXPR inside
the MUST_NOT_THROW_EXPR.

View File

@ -1200,7 +1200,12 @@ reference_binding (tree rto, tree rfrom, tree expr, bool c_cast_p, int flags)
return conv;
}
else if (CLASS_TYPE_P (from) && !(flags & LOOKUP_NO_CONVERSION))
/* [class.conv.fct] A conversion function is never used to convert a
(possibly cv-qualified) object to the (possibly cv-qualified) same
object type (or a reference to it), to a (possibly cv-qualified) base
class of that type (or a reference to it).... */
else if (CLASS_TYPE_P (from) && !related_p
&& !(flags & LOOKUP_NO_CONVERSION))
{
/* [dcl.init.ref]

View File

@ -0,0 +1,15 @@
// PR c++/31419
struct B
{
template<typename T>
operator T const& () const
{
return 42;
}
};
B f()
{
return B();
}