re PR c++/3518 (default conversion to pointer-to-function is applied to soon (related to DR295))

cp:
	PR c++/3518
	* pt.c (check_cv_quals_for_unify): Ignore bogus CV quals at outer
	level.
testsuite:
	PR c++/3518
	* g++.dg/template/unify7.C: New.

From-SVN: r80432
This commit is contained in:
Nathan Sidwell 2004-04-05 15:52:12 +00:00 committed by Nathan Sidwell
parent 30c2010625
commit 355f774dec
4 changed files with 29 additions and 2 deletions

View file

@ -1,3 +1,9 @@
2004-04-05 Nathan Sidwell <nathan@codesourcery.com>
PR c++/3518
* pt.c (check_cv_quals_for_unify): Ignore bogus CV quals at outer
level.
2004-04-05 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* init.c (decl_constant_value): Don't look at DECL_INITIAL

View file

@ -9551,13 +9551,15 @@ check_cv_quals_for_unify (int strict, tree arg, tree parm)
int arg_quals = cp_type_quals (arg);
int parm_quals = cp_type_quals (parm);
if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM)
if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
&& !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
{
/* Although a CVR qualifier is ignored when being applied to a
substituted template parameter ([8.3.2]/1 for example), that
does not apply during deduction [14.8.2.4]/1, (even though
that is not explicitly mentioned, [14.8.2.4]/9 indicates
this). */
this). Except when we're allowing additional CV qualifiers
at the outer level [14.8.2.1]/3,1st bullet. */
if ((TREE_CODE (arg) == REFERENCE_TYPE
|| TREE_CODE (arg) == FUNCTION_TYPE
|| TREE_CODE (arg) == METHOD_TYPE)

View file

@ -1,3 +1,8 @@
2004-04-05 Nathan Sidwell <nathan@codesourcery.com>
PR c++/3518
* g++.dg/template/unify7.C: New.
2004-04-02 Nathanael Nerode <neroden@gcc.gnu.org>
* g++.dg/README: Bring up to date with new subdirectories; remove

View file

@ -0,0 +1,14 @@
// Copyright (C) 2004 Free Software Foundation, Inc.
// Contributed by Nathan Sidwell 1 Apr 2004 <nathan@codesourcery.com>
// PR c++/3518
template <typename T> void Foo (const T &);
template <typename T> void Baz (const T (*)());
int &f ();
int main()
{
Foo (f);
Baz (f); // { dg-error "no matching function" "" }
}