我认为这个std :: map密钥提取到std :: vector应该没有为gcc(4.6)指定--std = c ++ 0x flag,但它没有。知道为什么吗?
template <typename Map, typename Container>
void extract_map_keys(const Map& m, Container& c) {
struct get_key {
typename Map::key_type operator()
(const typename Map::value_type& p) const {
return p.first;
}
};
transform(m.begin(), m.end(), back_inserter(c), get_key());
}
谢谢!
答案 0 :(得分:4)
原因是您使用本地类型get_key
作为最后一个参数。这在C ++ 98中是不允许的,并且C ++ 11的规则已经改变/放宽。
这可以在this example中找到:
template <class T> bool cpp0X(T) {return true;} //cannot be called with local types in C++03
bool cpp0X(...){return false;}
bool isCpp0x()
{
struct local {} var;
return cpp0X(var);
}