From 53db1bc08e4450cb53975377c209ff9cc9bfca9b Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Sat, 13 Jul 2013 19:10:12 -0400 Subject: call.c (can_convert): Allow user-defined conversions. * call.c (can_convert): Allow user-defined conversions. (can_convert_standard): New. * cp-tree.h: Declare it. * cvt.c (convert_to_reference): Use it. * pt.c (convert_nontype_argument): Likewise. * search.c (check_final_overrider): Likewise. Don't worry about user-defined conversions. From-SVN: r200937 --- gcc/cp/search.c | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) (limited to 'gcc/cp/search.c') diff --git a/gcc/cp/search.c b/gcc/cp/search.c index b113477..166ac11 100644 --- a/gcc/cp/search.c +++ b/gcc/cp/search.c @@ -1889,22 +1889,16 @@ check_final_overrider (tree overrider, tree basefn) fail = 1; } } - else if (!pedantic - && can_convert (TREE_TYPE (base_type), TREE_TYPE (over_type), - tf_warning_or_error)) + else if (can_convert_standard (TREE_TYPE (base_type), + TREE_TYPE (over_type), + tf_warning_or_error)) /* GNU extension, allow trivial pointer conversions such as converting to void *, or qualification conversion. */ { - /* can_convert will permit user defined conversion from a - (reference to) class type. We must reject them. */ - if (CLASS_TYPE_P (non_reference (over_return))) - fail = 2; - else - { - warning (0, "deprecated covariant return type for %q+#D", - overrider); - warning (0, " overriding %q+#D", basefn); - } + if (pedwarn (DECL_SOURCE_LOCATION (overrider), 0, + "invalid covariant return type for %q#D", overrider)) + inform (DECL_SOURCE_LOCATION (basefn), + " overriding %q+#D", basefn); } else fail = 2; -- cgit v1.1