In the ISO International Standard for C++11, a summary of the differences between c++ 2003 and C++ 2011 is given. One of the difference is:
[diff.cpp03.special]
Change: Implicitly-declared special member functions are defined as deleted when the implicit definition would have been ill-formed.
Rationale: Improves template argument deduction failure.
Effect on original feature: A valid C++ 2003 program that uses one of these special member functions in a context where the definition is not required (e.g., in an expression that is not potentially evaluated) becomes ill-formed.
I fail to see in which condition such special functions would be ill-formed, and how it could break SFINAE. So my question boils down to:
- Why such a change does "improves template argument deduction failure"?
- Could you give an example?