PR c++/31419
* call.c (reference_binding): Don't look for user-defined conversions
to the same type.
From-SVN: r128102
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.
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]
--- /dev/null
+// PR c++/31419
+
+struct B
+{
+ template<typename T>
+ operator T const& () const
+ {
+ return 42;
+ }
+};
+
+B f()
+{
+ return B();
+}