Обозначает ли спецификатор constexpr
спецификатор noexcept
для функции? Отвечать на аналогичный вопрос говорит "да" относительно спецификатора inline
, но статья Эрика Ниблера заставляет задуматься о возможном ответе на текущую. На мой взгляд, ответ может зависеть от контекста использования функции constexpr
: это контекст контекста или контекст времени выполнения, т.е. Все параметры функции, известные во время компиляции или нет.
Я ожидал, что ответ будет "да", но простая проверка показывает, что это не так.
constexpr
bool f(int) noexcept
{
return true;
}
constexpr
bool g(int)
{
return true;
}
static_assert(noexcept(f(1)));
static_assert(noexcept(g(2))); // comment this line to check runtime behaviour
#include <cassert>
#include <cstdlib>
int
main(int argc, char * [])
{
assert(noexcept(f(argc)));
assert(noexcept(g(argc)));
return EXIT_SUCCESS;
}