Thanks for the clarification. I may have focused too narrowly on "I'm not sure it's actually worth working around" without comprehending more fully. I didn't mean to negate your question.
I can report that over many years, I have run into trouble with many compilers (and compiler versions) on many platforms with these constant integers. Way back, it was enough to declare them as 'const int', then some compilers tightened that to 'static const int', but that didn't work everywhere. The only common denominator was 'enum', which worked on all compilers across all versions across all platforms. In CS, we have always made the extra effort to work around localized problems, such as this one, so it seemed sensible to recommend continuing to do so.
Post by Matthieu KrausI wasn't assuming that a specific gcc version was present, merely
asking whether the issue only arose in c++03 mode for new gcc versions
which support c++11 as it didn't show in an old one (in my case I
tested with 4.4.7 which is what RHEL 6 comes with) and as res stated
some of the rules applying to static member initialization and const
expressions changed in c++11.
Post by Eric SunshineOn Mon, Sep 30, 2013 at 4:32 PM, Matthieu Kraus
Post by Matthieu KrausYou can go with an enum then, but please don't use such a c-style
cast, either use static_cast<int> or use csMin<int> - the code in
question here is very clean in that regard and I'd really appreciate
if it stays that way.
Question though: does that only break with 4.8.x and does it work in
c++11 mode? Because it worked fine for me with VS10 and gcc 4.4.7, so
if it's only such a recent version where it breaks and if it only
breaks in c++03 mode I'm not sure it's actually worth working around
as you should be using c++11 mode with the newer gcc versions, anyway.
Some people are stuck at whatever compiler version is supplied by
their vendor (think Apple and Xcode), so we shouldn't necessarily
assume that using a newer gcc version is an easy option. With a simple
work-around as we have available here (using one of the syntaxes you
suggest above), we should apply it.
-- ES
Post by Matthieu Krauskind regards,
RlyDontKnow
Post by Ralph CampbellI tried that first actually.
Switching to an enum doesn't work because csMin() is defined to use
references to T and at least gcc 4.8.1 is gets confused what type to
use for the template (int or enum).
Doing "maxObjects += csMin(maxObjects+2, (int)objectGrowth);"
seems to work though.
The static variable isn't allocated space anywhere so
applications linking
to the CS library fail to link.
I didn't see a good place to define it so I did the easy thing
and used a
constant.
@@ -415,7 +415,6 @@
int numObjects; // current storage used
int maxObjects; // current storage capacity
int estimateObjects; // estimated number of objects in whole tree
- static int const objectGrowth = 80; // storage growth minimum
// Minimum amount of objects in this tree before we consider
splitting.
int minSplitObjects;
I think it's a thing that works in C++11 (becomes a “true“ constant
there), but it results in the static var prob you see above with C++03.
enum { objectGrowth = 80 };
-f.r.
------------------------------------------------------------------------------
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from
the latest Intel processors and coprocessors. See abstracts and register >
http://pubads.g.doubleclick.net/gampad/clk?id=60134791&iu=/4140/ostg.clktrk
_______________________________________________
Crystal-develop mailing list
https://lists.sourceforge.net/lists/listinfo/crystal-develop
------------------------------------------------------------------------------
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from
the latest Intel processors and coprocessors. See abstracts and register >
http://pubads.g.doubleclick.net/gampad/clk?id=60134791&iu=/4140/ostg.clktrk
_______________________________________________
Crystal-develop mailing list
https://lists.sourceforge.net/lists/listinfo/crystal-develop