gpt4 book ai didi

c++ - 为什么在这段C++代码中不能实例化模板?

转载 作者:行者123 更新时间:2023-12-01 13:00:01 24 4
gpt4 key购买 nike

如题,为什么main函数中的模板实例化出错了?我使用带有标志“-std=c++2a”的 Clang++。我在这里以错误的方式使用了什么吗?

template<int, int>
void f(int) { std::cout << "int"; };

template<class T>
void g() { // dependent-name.
f<0, T()>(0);
}

int main() {
g<int>(); // wrong here, why?
}
来自 Clang 的错误消息:
test.cc:41:3: error: no matching function for call to 'f'
f<0, T()>(0);
^~~~~~~~~
test.cc:48:3: note: in instantiation of function template specialization 'g<int>' requested here
g<int>(); // "int";
^
test.cc:35:6: note: candidate template ignored: invalid explicitly-specified argument for 2nd
template parameter
void f(int) { std::cout << "int"; };
^
1 error generated.

最佳答案

这个实例化:

f<0, T()>(0);
T=intint()对于第二个显式模板参数。这基本上是一个令人烦恼的解析,因此参数被视为函数类型。这与 int 不同对象,这是什么 f期望其模板参数。
相反,您可以像这样实例化它:
f<0, T{}>(0);
这样第二个模板参数是 int目的。
这是一个 demo .

关于c++ - 为什么在这段C++代码中不能实例化模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63489974/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com