我想将可变参数类型列表“具体化”为相关值的 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";
}
}
那么,这样的代码合法吗?在 C++11/14/17 中?