Re: [Crystal-cvs] SF.net SVN: crystal:[39815] CS/trunk/include/csgeom/spatialtree.h
Eric Sunshine <[email protected]> Tue, 1 Oct 2013 05:22:57 -0400
| Newsgroups | gmane.comp.graphics.crystalspace.devel |
|---|---|
| Message-ID | <[email protected]> |
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. -- ES On Oct 1, 2013, at 5:05 AM, Matthieu Kraus wrote: > I 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. > > Quoting Eric Sunshine <[email protected]>: > >> On Mon, Sep 30, 2013 at 4:32 PM, Matthieu Kraus >> <[email protected]> wrote: >>> You 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 >> >> >>> >>> kind regards, >>> RlyDontKnow >>> >>> Quoting Ralph Campbell <[email protected]>: >>> >>>> I 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. >>>> >>>> >>>> On Mon, 2013-09-30 at 19:37 +0200, res wrote: >>>>> On 30.09.2013 19:25, [email protected] wrote: >>>>>> 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. >>>>> There the workaround is to use an enum: >>>>> 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 >> [email protected] >> 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 > [email protected] > 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