Re: vector<> issue in g++?

2009-04-19 Thread James Dennett
On Sun, Apr 19, 2009 at 4:15 PM, Paolo Piacentini
 wrote:
> I don't think this is a bug but certainly it is a problem.
>
> Would you please consider it and let me know? I hope so. Thanks.
>
> The following simple volcalc.cpp code compiles with no errors (and
> works) in Windows Visual C++.
> It simply sizes the "alldata" array later in the code.

If Visual C++ does not diagnose the error in the code in its best
standards-conforming mode, that is a bug in Visual C++.  Allowing it
as an extension is an entirely reasonable thing to do though.

> With g++ v.4.3.2 instead I get the error reported hereby.
> For some reason it does not like the fact that struct is declared
> local.

That is what C++ requires; template parameters must have external
linkage, and in C++98 local types do not have external linkage.

> If you declare struct as global it will be working but I cannot
> change the code so drastically.
>
> I would thankfully appreciate any help (including tough critics to the code).

The "drastic" change would be needed to make your code valid C++, and
if you do that then g++ will compile it.

There has been discussion of changing this rule for the next C++
standard, see e.g.,
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2402.pdf
though I don't see signs of it having been merged into the current
committee draft.  N2402 does mention the change in MSVC++ as being a
relatively recent extension.  A quick search hasn't turned up the
current status of N2402, though there was some discussion of weakening
it by removing support for using unnamed types as template parameters,
and it seemed to have reasonably strong support in that form.

-- James


Re: vector<> issue in g++?

2009-04-20 Thread James Dennett
On Sun, Apr 19, 2009 at 7:19 PM, James Dennett  wrote:
> On Sun, Apr 19, 2009 at 4:15 PM, Paolo Piacentini
>  wrote:
>> I don't think this is a bug but certainly it is a problem.
>>
>> Would you please consider it and let me know? I hope so. Thanks.
>>
>> The following simple volcalc.cpp code compiles with no errors (and
>> works) in Windows Visual C++.
>> It simply sizes the "alldata" array later in the code.
>
> If Visual C++ does not diagnose the error in the code in its best
> standards-conforming mode, that is a bug in Visual C++.  Allowing it
> as an extension is an entirely reasonable thing to do though.
>
>> With g++ v.4.3.2 instead I get the error reported hereby.
>> For some reason it does not like the fact that struct is declared
>> local.
>
> That is what C++ requires; template parameters must have external
> linkage, and in C++98 local types do not have external linkage.
>
>> If you declare struct as global it will be working but I cannot
>> change the code so drastically.
>>
>> I would thankfully appreciate any help (including tough critics to the code).
>
> The "drastic" change would be needed to make your code valid C++, and
> if you do that then g++ will compile it.
>
> There has been discussion of changing this rule for the next C++
> standard, see e.g.,
> http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2402.pdf
> though I don't see signs of it having been merged into the current
> committee draft.  N2402 does mention the change in MSVC++ as being a
> relatively recent extension.  A quick search hasn't turned up the
> current status of N2402, though there was some discussion of weakening
> it by removing support for using unnamed types as template parameters,
> and it seemed to have reasonably strong support in that form.

Asking around a little more, and I've been pointed to
  http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm
which has been incorporated into the current committee draft for
C++0x, and allows use of local types as template parameters.  It looks
like your code will become legal in the next C++ standard, and g++
might well start supporting this before then (if someone is inspired
to implement it, that is).

-- James