This is the mail archive of the gcc-prs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: c++/5435: Resolution of templates with thing[] types


The following reply was made to PR c++/5435; it has been noted by GNATS.

From: =?iso-8859-1?Q?LEMA=CETRE?= Guillaume <guillaume.lemaitre33@wanadoo.fr>
To: rodrigc@gcc.gnu.org, guillaume.lemaitre33@wanadoo.fr
Cc:  
Subject: Re: c++/5435: Resolution of templates with thing[] types
Date: Mon, 28 Jan 2002 18:42:13 +0100

 rodrigc@gcc.gnu.org a écrit :
 > 
 > Synopsis: Resolution of templates with thing[] types
 > 
 > State-Changed-From-To: open->analyzed
 > State-Changed-By: rodrigc
 > State-Changed-When: Sun Jan 20 14:07:46 2002
 > State-Changed-Why:
 >     Your code example is ill-formed.
 > 
 >     You defined a template function, but did not refer to
 >     it properly.  Your code example should be something like:
 > 
 >     template< typename ContainerAddress_ >
 >     void f( ContainerAddress_ p_in ) {
 >     }
 > 
 >     int main( const int argc, char * argv[] ) {
 >       int mof[argc];
 > 
 >       f<int *>( mof );
 > 
 >       return 0;
 >     }
 > 
 > http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=5435
 
 I think I haven't been clear the first time
 
 I consider that mof is a container, in the sense that I can apply
 operator[] to it, as I could do if I had declared mof like this :
 
 int * mof = new int[argc];
 
 So, as the name of the typename suggests it, i want to pass the address
 of the container I have to function 'f'; so the correct call seems to be
 
 template< typename ContainerAddress_ > void f( ContainerAdress_ p_in )
 {};
 f( &mof );
 
 
 with mof declared as a variable length array or a pointer to memory;
 
 The issue is that the template cannot resolve itself to int(*)[argc].
 If I specify f< int(*)[argc] >( &mof ) it doesn't work (I get an ICP),
 that's what I wanted to point out. The fact is that I verified if taking
 address of an array was legal, it seems to be... So I don't understand
 why it doesn't compile, or g++ doesn't convert int(*)[argc] to a int**
 to call the right function 'f'
 
 Maybe I'm totally mistaking, but I don't understand why arrays doesn't
 behave the same as memory spaces dynamically allocated with operator
 new. Maybe it's not your problem, perhaps i should post that sort of
 mail to newsgroups, but I thought it was a bug, and still think it's a
 bug. Or maybe it is the way f is defined ? Should it be declared like
 this ?
 
 template< typename Container_ > void f( Container_ * p_in ) {}
 
 it doesn't work either ...
 
 friendly
 Guillaume
 
 -- 
 "C'est terrible l'intelligence. C'est le seul outil de l'homme
  qui lui permette de mesurer l'étendue de son malheur."
 
                                                   P. Desproges


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]