Почему в 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 не уменьшит выразительность понятий.

Другие вопросы по тегам