Значения параметров шаблона должны быть известны во время компиляции.
std::variant<int, std::string> is;
constexpr int i = 0;
std::cout << std::get<i>(is);
Это работает, потому что значение i
объявлено с constexpr
и, таким образом, известно во время компиляции, поэтому выэффективный вызов std::get<0>(is)
.
std::variant<int, std::string> is;
std::cout << std::get<is.index()>(is);
Это не удается, поскольку is
не объявлено с constexpr
и, следовательно, значение, которое возвращает is.index()
, не может быть известно до времени выполнения, поэтому его нельзя использоватьв параметре шаблона.