Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ MSVC12中不允许在默认参数中实例化模板类?_C++_Templates_Visual C++_Compiler Errors_Default Parameters - Fatal编程技术网

C++ MSVC12中不允许在默认参数中实例化模板类?

C++ MSVC12中不允许在默认参数中实例化模板类?,c++,templates,visual-c++,compiler-errors,default-parameters,C++,Templates,Visual C++,Compiler Errors,Default Parameters,我刚刚在我们的项目中提取了以下问题。下面的代码只需使用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;

我刚刚在我们的项目中提取了以下问题。下面的代码只需使用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;
}
<>我不想讨论C.Tor的软件设计,但是这是编译器问题还是标准C++中不允许的,G++不严格要求?p> 首先,我认为默认参数中的模板实例化可能是不允许的,或者在默认参数中嵌套了c'TOR。但是,如果我使用向量的另一个c'tor:

foo(bar* a = new bar(vec_t(0))) {}

它是用MSVC编译的。我就是不明白为什么上层版本不能编译?对此有何想法?

这似乎是“最麻烦的解析”的问题(有关更多信息,请参阅相关文章)。消除新表达式歧义的一种方法是在构造函数周围添加括号,如下所示

foo(bar* a = new bar((vec_t()))) {};
当涉及到标准遵从性时,我不确定。我浏览了的第6.8节(歧义解决)和第5.3.4节(新),没有过多思考,任何东西都不突出。也许一个真正的语言律师需要介入给出答案。

试试
newbar((vect_t()){}
foo(bar* a = new bar((vec_t()))) {};