
2015-01-21 22:14 GMT+01:00 Andrey Semashev <andrey.semashev@gmail.com>:
On Thu, Jan 22, 2015 at 12:10 AM, Andrzej Krzemienski <akrzemi1@gmail.com> wrote:
2015-01-21 21:56 GMT+01:00 Peter Dimov <lists@pdimov.com>:
An optional<T&> that fails silently for certain T's in a quite insidious way on a wide array of popular compilers, including all versions of
MSVC,
should perhaps be disabled for those T's outright, instead of the failures being marked. Users do not consult the markup when using optional<> and even if they did, optional<int const&> is most likely to occur in generic code, not on its own. This will result in some very hard to track bugs.
Are you saying that on a compiler where an operation on optional<T&> might give wrong run-time result, the operation should be disabled (render a compile-time error)? If so, I agree, and intend to do it at some point. But even then I should indicate somehow in regression tests that I expect different results in gcc and in msvc.
What kind of errors are we talking about? Does optional<T&> behave plain wrong on MSVC or is there a misbehavior in some narrow case? Does it compile invalid code, does it not compile valid one, or is there a miscompilation?
In most of the cases the program compiles but we have a run-time misbehavior: we store a reference to an unexpected temporary rather than to the original object.