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:
parent
30c2010625
commit
355f774dec
4 changed files with 29 additions and 2 deletions
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
14
gcc/testsuite/g++.dg/template/unify7.C
Normal file
14
gcc/testsuite/g++.dg/template/unify7.C
Normal 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" "" }
|
||||
}
|
Loading…
Add table
Reference in a new issue