c++/6785

Wolfgang Bangerth bangerth@ices.utexas.edu
Wed May 14 06:16:00 GMT 2003


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/




More information about the Gcc-bugs mailing list