В чем разница между C++ Concepts и C++ Template Constraints?
Как видно из названия, есть что-то под названием Concepts Lite (шаблонные ограничения) и Concept Design для STL. Кто-нибудь может объяснить некоторые фундаментальные различия между ними?
1 ответ
Первый вводит изменения в язык C++ (ядро), чтобы иметь возможность выражать ограничения на шаблоны. Обеспечение разумных проверок, хороших сообщений об ошибках для пользователей и простых инструментов для авторов шаблонов.
Он будет разработан как Техническая спецификация (TS) и ожидается к середине 2014 года, примерно в то же время C++14. Авторы компиляторов, похоже, с энтузиазмом отправят его в ближайшее время.
Второе касается библиотеки: текущий стандарт lib не может использовать ограничения, которые еще не являются частью стандарта по понятным причинам. Но как только эта часть станет бозе, шаблоны могут и будут улучшены с более естественным выражением требований. Т.е. в настоящее время только в тексте написано, что аргумент шаблона должен быть конструируемым или назначаемым по умолчанию. Так что если вы используете C++03 и std::vector<std::auto_ptr<int> >
это просто UB. Но с продуманной версией такие проблемы будут диагностироваться при компиляции.