Согласно this, функция, объявленная с помощью constexpr
, должна удовлетворять нескольким требованиям, один из которых выглядит следующим образом:
существует по крайней мере одно значение аргумента, так что вызов функции может быть оцененным подвыражением выражения константы ядра...
constexpr
функция не может иметь никаких аргументов:
constexpr int Bar( /* empty */ ) { return 0xFF; }
constexpr int value = Bar(); // Valid expression
Функция constexpr
, которая вызывается как подпрограмма, не может определить, что все выражение также является основным постоянным выражением.
Так что же означает значение одного аргумента?
[Обновить для будущих читателей]
По-видимому, описание требований constexpr function
было исправлено, поскольку этот вопрос:
существует по крайней мере одно значение аргумента, так что вызов функции может быть оцененным подвыражением выражения константы ядра...
в
существует по крайней мере один набор значений аргументов, так что вызов функции может быть оцененным подвыражением выражения константы ядра...