
I think std::condition is a special case. The exception to the rule.
This is a really low-level class where we have very strong motivation to provide two conflicting goals: ultimate performance and consistency checking.
I'm not convinced that std::condition is more special in terms of performance requirements than say std::vector or std::for_each. There are plenty of other components that are commonly used in performance-critical code -- which is precisely why the standard does not require such components to detect and report errors, yet implementations commonly detect and report them, at least in debug builds.
And all of the sudden the above code is no longer legal. If the code is legal with one constructor, what is it that makes the code a logic error **100% of the time**, instead of a fixable exceptional circumstance when using the second constructor?
One can come up with any number of examples of bugs being introduced in previously correct programs by seemingly trivial changes. Emil Dotchevski http://www.revergestudios.com/reblog/index.php?n=ReCode