On Tue, Dec 9, 2014 at 9:39 AM, Peter Dimov
There's nothing wrong (or unsafe) with the old behavior - it consistently answers the question "does v contain a T" - so the decision can't be made based on principles alone and must be informed by practice. That is, do the benefits of the strict get - which are pretty much only catching your typo when you say get<T>(v) instead of get<T>(w) - outweigh the loss of functionality.
While that's true, the old behavior seems about as compelling to me as if the language allowed you to static_cast between any two types, but yielded a null pointer at run-time if there were no valid conversion. Even if it breaks a bunch of code it's probably better in the long run, unless there are interesting idiomatic use-cases. -- -Matt Calabrese