This is the mail archive of the
gcc-prs@gcc.gnu.org
mailing list for the GCC project.
Re: c++/6785
- From: Wolfgang Bangerth <bangerth at ices dot utexas dot edu>
- To: nobody at gcc dot gnu dot org
- Cc: gcc-prs at gcc dot gnu dot org,
- Date: 14 May 2003 00:56:00 -0000
- Subject: Re: c++/6785
- Reply-to: Wolfgang Bangerth <bangerth at ices dot utexas dot edu>
The following reply was made to PR c++/6785; it has been noted by GNATS.
From: Wolfgang Bangerth <bangerth@ices.utexas.edu>
To: gcc-bugs@gcc.gnu.org, <gcc-gnats@gcc.gnu.org>, <nathan@codesourcery.com>
Cc:
Subject: Re: c++/6785
Date: Tue, 13 May 2003 19:55:39 -0500 (CDT)
This doesn't ICE any more with mainline, but with James's smaller
testcase,
----------------------
#include <cstddef>
template< typename T, size_t N >
size_t
size( T (&a)[ N ] )
{
return N ;
}
void
f()
{
static char const s[] = "abc" ;
int buf[ size( s ) ] ;
size_t r = size( buf ) ;
}
----------------------
I now get:
g/x> /home/bangerth/bin/gcc-3.4-pre/bin/c++ -c x.cc
x.cc: In function `void f()':
x.cc:14: error: no matching function for call to `size(int[size(T (&)[N])
[with
T = const char, unsigned int N = 4]((&s))])'
I think, it's warranted that gcc doesn't find a match, since "buf" is
dynamically sized (there are other duplicates of this problem). It's
funny, though, that gcc is able nevertheless to figure out the size of the
array, and the error message of course is not very helpful:
- it says that there's no match, even gives the template args, where there
of course is one.
- the placing of the template args is wrong in the message.
Nathan, can you say anything about the legality of this at least?
W.
-------------------------------------------------------------------------
Wolfgang Bangerth email: bangerth@ices.utexas.edu
www: http://www.ices.utexas.edu/~bangerth/