C++ 如何在STLport库中使用const auto

C++ 如何在STLport库中使用const auto,c++,c++11,auto,stlport,C++,C++11,Auto,Stlport,我试图编译基本示例: #include <vector> int main () { std::vector<int> testV; for (const auto& test : testV) { } return 0; } #包括 int main() { std::向量testV; 用于(const auto&test:testV) { } 返回0; } 我收到了错误: test.cpp:在函数“int main

我试图编译基本示例:

#include <vector>
int main ()
{
    std::vector<int> testV;
    for (const auto& test : testV) 
    {   }
    return 0;
}
#包括
int main()
{
std::向量testV;
用于(const auto&test:testV)
{   }
返回0;
}
我收到了错误:
test.cpp:在函数“int main()”中:

test.cpp:5:29:错误:未在此范围内声明“begin”

test.cpp:5:29:错误:未在此范围内声明“end”

test.cpp:5:29:错误:无法从“”推断“const auto&”

STLport是否支持
const auto

编辑:我使用的是
gcc4.6


有了4.7和更多,一切都好了

GCC4.6于2011年春季发布,在大多数C++11特性中并非没有缺陷。然而,大约在同一时间,范围内的ADL查找规则也进行了修改(请注意,这是在2011年夏天正式批准C++11标准之前)。有关更多详细信息,请参阅。可能不值得对此进行调试,建议的做法是升级到最新版本的gcc(4.7或最好是4.8)。

这取决于您的编译器、您使用的版本和编译器?事实上,我记得现在它首先查找成员版本。然后是非成员(6.5.4)。所以它应该可以工作。@TemplateRex请查看标准的第6.5.4节。这似乎是一个非常常见的误解,但首先要查找成员版本。然后通过ADL(无正常查找)将非成员版本与
std::
视为关联的命名空间。(,但格式不好)@BoBTFish darn,你说得对,证实了这一点it@BoBTFish这种误解至少在一定程度上是因为官方C++11之前的旧版本C++0x实际上只查找非成员(但模板
std::begin
std::end
无论如何都只是遵从成员函数)。