On Sun, Apr 19, 2009 at 4:15 PM, Paolo Piacentini <paolopi...@hotmail.com> 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