Почему в C++ Concepts TS есть понятия как переменных, так и функций?
Я смотрел на черновой вариант C++ 1z N4377 Concepts TS, который реализуется в GCC 6, и я не понимаю цели обладания двумя разными видами понятий: понятиями переменных и понятиями функций.
Соответствующей частью черновика концепций функций является [dcl.spec.concept (5.4)]
- Объявление должно иметь тело-функцию, эквивалентное
{ return E; }
гдеE
является выражением ограничения (14.10.1.3).
и для переменных понятий в следующем параграфе [(6.3)]:
- Инициализатор должен быть выражением ограничения.
Есть ли что-то, что один из них может сделать, а другой - нет? Если нет, есть ли обоснование для включения обоих?
Примечание: последняя версия P0121R0 ничего не меняет в этом отношении
1 ответ
Концепции функций могут быть перегружены на разных параметрах шаблона. Переменные понятия не дают ничего такого, чего нет у функциональных понятий, за исключением способности не помещать ()
в некоторых контекстах.
Исключение переменных понятий из TS не уменьшит выразительность понятий.