Я хотел бы «материализовать» список типов переменных в initializer_list связанных значений.Например, имея std::tuple
из нескольких std::integral_constant<T, x>
, вы получите std::initializer_list<T>{...}
.В общем случае я хотел бы получить initializer_list некоторого сложного типа, например std::string
.
. Но следующий простой пример дает мне сбой при компиляции Clang (хотя он работает с GCC, по крайней мере, на Coliru), поэтому я подозреваю UB (или ошибку в Clang):
template <class... Ts>
std::initializer_list<const std::string> materialize()
{
return {
std::to_string(Ts::value)...
};
}
void print_out()
{
for (const auto & x : materialize<std::true_type, std::false_type>()) {
std::cout << x << "\n";
}
}
Live на Coliru
Итак, такой код законен?В С ++ 11/14/17?