From: Jason Merrill Date: Tue, 11 Sep 2007 15:40:51 +0000 (-0400) Subject: re PR c++/31419 (template user defined conversion operator instantiated for conversio... X-Git-Tag: releases/gcc-4.2.2~82 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bbe61471dd42ded6e59bcf66de859cc7708fd7e6;p=thirdparty%2Fgcc.git 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: r128383 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 897e9e3e705b..e975e4b17927 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2007-09-11 Jason Merrill + PR c++/31419 + * call.c (reference_binding): Don't look for user-defined conversions + to the same type. + PR c++/15745 * except.c (prepare_eh_type): Use type_decays_to. diff --git a/gcc/cp/call.c b/gcc/cp/call.c index c67e844d7fed..891ebb96829c 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -1153,7 +1153,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]