Согласно справке c ++ , параметр шаблона std::get
равен std::size_t
.Зачем нужен явный приведение, когда таким параметром является enum class
с базовым типом std::size_t
вместо неявного преобразования?
См. Следующий пример
#include <tuple>
enum class labels : std::size_t { red, green, blue };
int main()
{
std::tuple<int, int, double> a;
// std::get<labels::red>(a) = 0;
std::get<static_cast<std::size_t>(labels::red)>(a) = 0;
std::get<static_cast<std::size_t>(labels::green)>(a) = 0;
std::get<static_cast<std::size_t>(labels::blue)>(a) = 0;
return 0;
}
Раскомментированиестрока вызывает ошибку компиляции (gcc 7.3.0)
tuple.cpp:8:26: error: could not convert template argument ‘red’ from ‘labels’ to ‘long unsigned int’
std::get<labels::red>(a) = 0;