2010/6/8 Sebastian Redl <sebastian.redl@getdesigned.at>

On Tue, 8 Jun 2010 12:23:03 +0200, José Tomás Tocino García
<theom3ga@gmail.com> 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