Hi there,
I've started to use boost::property_tree to parse some ini files, and I'm
getting an error when I compile using -Wall on gcc 4.4.3.
For this testcase:
#include
On Tue, 8 Jun 2010 12:23:03 +0200, José Tomás Tocino García
cout << myTree.get<float>("sonido.limite", 0.);
If I compile using "g++ -o program testcase1.cpp -I." I get no errors,
but
if I add "-Wall", I get:
./boost/property_tree/detail/ptree_implementation.hpp: In function ‘int main(int, char**)’: ./boost/property_tree/detail/ptree_implementation.hpp:728: warning: dereferencing pointer ‘default_value’ does break strict-aliasing rules /usr/include/boost/optional/optional.hpp:422: note: initialized from here
What's the problem? It compiles and works properly, but it would be great to have a warning-free compilation output.
That's really weird, and looks more like a compiler bug to me than a valid warning. For sure, 'default_value' is certainly not initialized within optional.hpp. But then, the strict-aliasing warnings are flow-sensitive and thus emitted during optimization, which means that GCC's internal view of the source could be quite seriously messed up by then. Do you get the warning if you explicitly type the default value correctly, i.e. use '0.f' instead of '0.'? Sebastian
2010/6/8 Sebastian Redl
On Tue, 8 Jun 2010 12:23:03 +0200, José Tomás Tocino García
wrote: cout << myTree.get<float>("sonido.limite", 0.);
If I compile using "g++ -o program testcase1.cpp -I." I get no errors,
but
if I add "-Wall", I get:
./boost/property_tree/detail/ptree_implementation.hpp: In function ‘int main(int, char**)’: ./boost/property_tree/detail/ptree_implementation.hpp:728: warning: dereferencing pointer ‘default_value’ does break strict-aliasing rules /usr/include/boost/optional/optional.hpp:422: note: initialized from here
What's the problem? It compiles and works properly, but it would be great to have a warning-free compilation output.
That's really weird, and looks more like a compiler bug to me than a valid warning. For sure, 'default_value' is certainly not initialized within optional.hpp. But then, the strict-aliasing warnings are flow-sensitive and thus emitted during optimization, which means that GCC's internal view of the source could be quite seriously messed up by then.
Do you get the warning if you explicitly type the default value correctly, i.e. use '0.f' instead of '0.'?
Sebastian
If I use 0.f, I still get the error, but it disappears if I omit the default value. Looks like disabling optimisation (in my code, -O2 was actually used) also makes the error disappear. I think that's what I'm going to do, wraping the call in a try...catch block, so if the value does not exist, I'll manually asign it to the variable. Thanks for your answer. -- José Tomás Tocino García
participants (2)
-
José Tomás Tocino García
-
Sebastian Redl