4
下面的代码在使用GCC和Clang使用C++ 11模式构建时无需编译错误/警告。但是,如果我尝试编译没有C++ 11模式,并在第二个范围发生错误。本地类作为谓词pre C++ 11
#include <algorithm>
#include <vector>
struct astruct
{
int v;
};
struct astruct_cmp0
{
bool operator()(const astruct& a0, const astruct& a1) {
return a0.v < a1.v;
}
};
int main()
{
std::vector<astruct> alist;
{
// Works - no errors
std::stable_sort(alist.begin(),alist.end(),astruct_cmp0());
}
{
struct astruct_cmp1
{
bool operator()(const astruct& a0, const astruct& a1) {
return a0.v < a1.v;
}
};
// error: template argument uses local type 'astruct_cmp1'
std::stable_sort(alist.begin(),alist.end(),astruct_cmp1());
}
return 0;
}
我的问题是:什么是C++ 11的变化,允许本地结构定义?有人可以请我指向标准中的特定部分(可能是9.8节?)