我在cppreference.com中找到了一些我不理解的代码。
这里是链接:Type Alias。这是我不了解的dependent template-id
。
这是代码:
//When the result of specializing an alias template is a dependent template-id,
//subsequent substitutions apply to that template-id:
template<typename...>
using void_t = void;
template<typename T>
void_t<typename T::foo> f();
f<int>(); // error, int does not have a nested type foo
当我在VS 2019上悬停它时,它说
void_t<<
未命名>...>
有人可以向我解释这个未命名的类型名有什么用吗?
答案 0 :(得分:4)
这是一个没有名称的模板包,因为未使用。您可以传递任何类型,结果将相同。
答案 1 :(得分:1)
template<typename...>
using void_t = void;
它允许您将模板参数传递给它,它将耗尽所有参数,从而得到相同的类型。对SFINAE有用
答案 2 :(得分:1)
让我尝试解释一下,
表达式template<typename...> using void_t = void;
的类型推导为void
,而与传递的模板参数无关。
例如,
template<typename...>
using void_t = void;
template <typename T>
void_t<T> fun1() {
std::cout << "fun1 called" << std::endl;
}
int main() {
fun1<int>(); //fun1 called
fun1<float>(); //fun1 called
}
要进行相同的扩展,template<typename T>void_t<typename T::foo> f();
仅接受嵌套类型为typename T
的{{1}}。例如,
T::foo
有关更多信息,请参见Substitution failure is not an error