diff options
-rw-r--r-- | gcc/cp/call.cc | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ext/conv3.C | 13 |
2 files changed, 15 insertions, 1 deletions
diff --git a/gcc/cp/call.cc b/gcc/cp/call.cc index 7bbc1fb..83070b2 100644 --- a/gcc/cp/call.cc +++ b/gcc/cp/call.cc @@ -6742,7 +6742,8 @@ add_candidates (tree fns, tree first_arg, const vec<tree, va_gc> *args, if (cand->viable == -1 && shortcut_bad_convs - && missing_conversion_p (cand)) + && (missing_conversion_p (cand) + || TREE_CODE (cand->fn) == TEMPLATE_DECL)) { /* This candidate has been tentatively marked non-strictly viable, and we didn't compute all argument conversions for it (having diff --git a/gcc/testsuite/g++.dg/ext/conv3.C b/gcc/testsuite/g++.dg/ext/conv3.C new file mode 100644 index 0000000..7324d56 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/conv3.C @@ -0,0 +1,13 @@ +// PR c++/106760 +// { dg-additional-options "-fpermissive" } + +struct S { + template<class> int f(); + template<class> int g(...); +}; + +int main() { + const S s; + s.f<void>(); // { dg-warning "discards qualifiers" } + s.g<void>(); // { dg-warning "discards qualifiers" } +} |