Visual c++ 使用';自动';针对每种原因C3539-为什么?

Visual c++ 使用';自动';针对每种原因C3539-为什么?,visual-c++,foreach,c++-cli,auto,Visual C++,Foreach,C++ Cli,Auto,我正在VC2010中编写一个托管DLL(即为VC++DLL项目启用/CLR)。以下代码无法编译: System::Collections::Generic::List<int>^ my_list; for each(auto elem in my_list) { } System::Collections::Generic::List^my\u List; 对于每个(我的_列表中的自动元素) { } 它引发错误:“auto”:模板参数不能是包含“auto”的类型 我不明白原因。

我正在VC2010中编写一个托管DLL(即为VC++DLL项目启用/CLR)。以下代码无法编译:

System::Collections::Generic::List<int>^ my_list;
for each(auto elem in my_list)
{

}
System::Collections::Generic::List^my\u List;
对于每个(我的_列表中的自动元素)
{
}
它引发错误:“auto”:模板参数不能是包含“auto”的类型

我不明白原因。我尝试在VS2012中编译相同的代码,但它会引发相同的错误(这是不合适的错误)


为什么编译器无法推断colleciton的类型?同样类型的代码在C#中也可以使用
var
关键字。

首先,注释中最重要的一点:


提供的代码在VS2013 c++/cli dll.net 4.5(,2014-05-03)中编译

< >编译时,它是C++的.NET绑定,您使用的是微软编译器的不同特性集。有些东西是否有效

  • /clr
    生效时
  • 或者,另外,当您使用“托管”构造时(如在代码中)
如果“正常”、本机、MSVC编译器接受它,则与此无关


至于“为什么”:似乎在VS2010和VS2012中,
auto
类型推断对托管句柄类型不起作用,但根据Zee的评论,随后已在VS2013中实现。(快速搜索引擎检查没有发现任何官方声明。这可能是错误的。)

c#!=C++、C++CLI与最近的C++特性如Auto+LAMBDAS不太好。提出的C++代码在VS2013 C++/CLI DLL.NET 4.5中编译。