В Международном стандарте ISO для c++ 11 приводится краткое изложение различий между c++ 2003 и c++ 2011. Одно из отличий:
[Diff.cpp03.special]
Изменение. Неявно объявленные специальные функции-члены определяются как удаленные, если неявное определение было бы плохо сформировано.
Обоснование: улучшает сбой вывода аргумента шаблона.
Влияние на оригинальную функцию: действующая программа c++ 2003, которая использует одну из этих специальных функций-членов в контексте, в котором определение не требуется (например, в выражении, которое потенциально не оценивается), становится плохо сформированным.
Я не вижу, в каком состоянии такие специальные функции будут плохо сформированы и как это может сломать SFINAE. Поэтому мой вопрос сводится к следующему:
- Почему такое изменение "улучшает сбой вывода аргумента шаблона"?
- Не могли бы вы привести пример?