template< class T >
class Foo {
public:
Foo( T t ) { }
};
int main () {
int i = 0;
Foo f( i );
}
在上面的代码中,编译器抱怨'f‘前缺少模板参数。我知道从构造函数的参数中推导出类的模板参数不是标准的一部分,但我的问题是为什么?编译器不是已经具备了隐式实例化Foo<int>
并调用其构造函数所需的全部信息吗?
编辑以清楚地表明我使用int
(而不是short
、long
、void*
等)调用构造函数。
发布于 2015-04-16 22:29:44
因为没有人具体说明它是如何工作的。目前有一项建议提交给标准委员会,以使其发挥作用。它还列出了一些困难:
http://open-std.org/JTC1/SC22/WG21/docs/papers/2015/n4471.html
更新:以下是该提案的最新版本:
http://open-std.org/JTC1/SC22/WG21/docs/papers/2015/p0091r0.html
https://stackoverflow.com/questions/29677505
复制相似问题