This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: bug report...
>>>>> Nathan Myers <ncm@cygnus.com> writes:
> B. James Phillippe wrote:
>>
>> On 5 Jun 1998, Alexandre Oliva wrote:
>>
>> > Yup, AFAI recall, the problem has to do with generating templates of
>> > local classes in function templates. Bear in mind, however, that
>> > using local classes as template arguments is *not* ANSI/ISO C++
>> > ([temp.arg.type]/2 explicitly forbits this), it is an extension
>> > provided by gcc and egcs.
>>
>> I'm sorry, I missed the first part of this thread. Can you provide a small
>> snippet of code that illustrates this? You say this is explicitly
>> forbidden from ISO C++ and it is supported anyway by egcs; is there a
>> warning or compiler flag that prevents someone from inadvertently writing
>> this non-portable code?
> Evidently the warning currently has the form:
> In function `void sort(T *, int)':
> In file included from teste.cc:1:
> Internal compiler error.
As Alexandre said, that's fixed in the current sources.
> for code (as requested)
> template< class T >
> void sort( T* t, int n )
> { struct { int operator()(T i, T j)
> { return (i < j) ? -1 : ((j < i) ? 1 : 0); }
> } c;
> sort(t,n,c,0); // this is the STL template algorithm.
> }
The compiler doesn't give any diagnostic for this testcase because there's
nothing wrong with it. It doesn't instantiate any templates using a local
class; in fact, it doesn't instantiate any templates at all.
Jason