
On Fri, Dec 18, 2009 at 3:10 AM, Emil Dotchevski <emildotchevski@gmail.com> wrote:
On Thu, Dec 17, 2009 at 10:07 AM, Giovanni Piero Deretta <gpderetta@gmail.com> wrote:
... but the dynamic type of the internal buffer of boost::optional has been changed via placement new, so (modulo compiler bugs) it should be safe: at any time the buffer has a specific type (when initialized) or no type at all (it is just a bunch of memory). Boost optional only dereferences the buffer when it has been initialized, and always with the same type used for placement new. Of course this is hard (impossible?) to prove statically and gcc warns even if it should be perfectly safe .
We had a discussion about warnings some time ago, I think this is an excellent example of a warning that warns about something important yet it is completely useless.
I don't understand why it's "completely useless" when in cases where they are done wrong it can cause a runtime crash.
To someone who doesn't know the semantics of reinterpret_cast, perhaps the warning has some value, but for the rest of us what it really says is "Warning! You have used reinterpret_cast!"
Sure, but isn't reinterpret_cast considered bad because of the fact that there is no standard implementation of it? I don't see why the warning doesn't help you know that there is something *potentially* wrong with the implementation. I still have not seen any other concrete ways of avoiding (or silencing) this warning at the code level. Maybe some pragmas to disable the warning if we're all really convinced this is a spurious warning? -- Dean Michael Berris blog.cplusplus-soup.com | twitter.com/mikhailberis linkedin.com/in/mikhailberis | facebook.com/dean.berris | deanberris.com