我正在测试这段代码(https://godbolt.org/z/fe6hhbeqW)......
// Returns the nth type in a parameter pack of types (ommited for clarity)
// template <std::size_t N, typename...Ts>
// nth_type{}
template <typename... Ts>
struct Typelist{
template <typename T>
consteval static std::size_t pos() noexcept {
for(std::size_t i{}; i < sizeof...(Ts); ++i) {
using TN = nth_type_t<i, Ts...>;
if (std::is_same_v<T, TN>)
return i;
}
return sizeof...(Ts);
}
};
我对它不起作用感到困惑。GCC 和 clang 同意i
不是一个常量表达式,所以他们拒绝让我将它作为模板参数传递。但是,i
在编译时就清楚地知道了,因此,据我所知,编译器使用它来实例化模板应该没有任何问题。
有没有理由不工作?将来会起作用吗?我已经用两个编译器的主干版本进行了测试,结果相同。