[英]Using member of template class to instantiate template default parameter in MSVC++
[英]Template class instantiation in default parameter not allowed in MSVC12?
我只是在我们的项目中提取了以下问题。 以下代码使用g ++即可正常编译
#include <vector>
class A {};
typedef std::vector<A*> vec_t;
class bar {
public:
bar(vec_t) {};
};
class foo
{
public:
foo(bar* a = new bar(vec_t())) {};
};
class B
{};
int main()
{
return 0;
}
然而,在Visual Studio编译器(VC12,但我相信所有其他的也行)不明白,foo的 酒吧的c'tor叫的c'tor默认参数,这需要载体的实例作为参数。 这将导致在此表达式之后声明的每个类/结构均出错:
error C2462: 'B' : cannot define a type in a 'new-expression'
我不想讨论c'tor的软件设计,但这是编译器问题,还是在标准C ++中是不允许的,而g ++对此并不严格?
首先,我认为可能不允许默认参数中的模板实例化或将默认参数嵌套在模板中。 但是,如果我使用向量的另一个c'tor:
foo(bar* a = new bar(vec_t(0))) {}
它与MSVC一起编译。 我只是看不到为什么不应该编译较高版本? 有什么想法吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.