Ответ 1
Есть несколько проблем при определении ограничения на С++, некоторые из них перечислены в документе WG N3635: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3635.pdf "На пути к подобной семантике для С++"
Некоторые возможные проблемы с ограничением в С++:
- Ограничить членов класса и коснуться указателем "this pointer"
- Передача ограничивающих квалификаторов на функции, функторы, lambdas и шаблоны
- Экранирование значений указателя ограничения внутри функций
- Перекрытие элементов массива, шагов
В документе также перечислены несколько компиляторов С++ с ограниченной поддержкой "ограничений" для С++.
В N3635 также есть интересная записка о неинтеграции ограничения на С++:
Во время рассмотрения включения функции C99 в С++ во время собрания Mont Tremblant ограничение было рассмотрено, но ожидало бумажного предложения, хотя никто не вышел вперед.
Ограничение - это функция C99 и никогда не предназначалась для работы в абстракциях классов, и, возможно, это связано с тем, что указатели не распространены в С++.... он был разработан для мелкозернистого сглаживания для C, но не был хорошо разработан для псевдонимов на основе типов в С++