Аргументы не являются / не могут быть constexpr
.(constexpr
функции могут использоваться в контексте non-constexpr).
Обратите внимание, что std::cout << count(t, ',') << std::endl;
может быть вычислено во время выполнения.вам потребуется
constexpr auto c = count(t, ',');
std::cout << c << std::endl;
, чтобы получить constexpr
оценочную гарантию.
При необходимости вы можете заключить значение в тип.
template <typename T, T ... cs, typename U>
constexpr static auto count(std::integer_sequence<T, cs...>, const U &val)
{
const T arr[] = {cs...};
auto cnt = 0;
auto it(std::cbegin(arr));
while (it != std::cend(arr))
{
if (*it == val)
cnt++;
it++;
}
return cnt;
}
auto sometext = std::integer_sequence<char,
's', 'o', 'm', 'e', 't', 'e', 'x', 't' /*, '\0'*/>;
constexpr auto num_elems(count(sometext, ','));