使用 std::iterator_traits<> 时编译时错误不明确

Unclear compile time error when using std::iterator_traits<>

本文关键字:gt 编译时错误 不明确 std lt traits 使用 iterator      更新时间:2023-10-16

有一个代码给出了一个错误,我完全不清楚。我想要的是通过iterator_traits传递一个指向结构/类成员的指针。

template<typename Iter, typename S>
S mean(Iter begin, const Iter& end, S std::iterator_traits<Iter>::value_type::* v)
{
//...
}

但即使在这个模板化函数的声明中,MSVS2015在上面的代码中也给出了以下错误:

错误C2653"value_type":不是类或命名空间名称

但是,没有iterator_trais<...>,即

template<typename Iter, typename S>
S mean(Iter begin, const Iter& end, S Iter::value_type::* v)
{
//...
}

一切都编译得很好。

为什么它不能将value_type识别为类名?

编译器错误?

这是一个简单的语法错误。你的意思是:

template<typename Iter, typename S>
S mean(
Iter begin,
const Iter& end,
typename std::iterator_traits<Iter>::value_type S::* v)
{
// ...
}