static_assert
внутри check
зависит от параметра функции.Это не означает, что у вас есть аргумент constexpr
для этой функции.Обратите внимание, что функция обычно используется несколько раз.Таким образом, в одном случае static_assert
может произойти сбой, в другом может пройтиСтатическое утверждение не проверяет, откуда была вызвана функция, содержащая его.Это должно быть проверено во время компиляции без проверки того, что ниже.
Возможно, вам нужно что-то вроде этого:
constexpr int is[2] = {23, 42};
template<typename T>
constexpr bool firstElementIs23(const T& v)
{
return v[0] == 23;
}
void bar()
{
static_assert (firstElementIs23(is), "Works");
}
Живой образец