使用 std::iterator_traits<> 时编译时错误不明确
Unclear compile time error when using std::iterator_traits<>
有一个代码给出了一个错误,我完全不清楚。我想要的是通过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)
{
// ...
}
相关文章:
- 在缺少函数重载时抛出异常,并带有 std::variant 而不是编译时错误
- 如何在常量计算表达式中获取编译时错误?
- C++根据调用的构造函数强制编译时错误
- 使用 std::iterator_traits<> 时编译时错误不明确
- is_same和variadic模板编译时错误无效转换
- 私有运营商删除会触发 GCC 和 Clang 的编译时错误,但不会在 MSVC 上触发编译时错误
- 运行时与编译时多态性:更好的可读性与编译时错误检查,更重要的是
- 引发编译时错误
- 为什么调用不明确的 ctor 时没有编译时错误?
- 在 sizeof 运算符上强制编译时错误
- 未经授权的私有类成员访问会产生编译时错误而不是运行时错误?
- 从Mac上的终端编译时C 错误
- 使用MINGW-W64使用-M32选项(32位代码)编译时错误
- C++线程错误 - 带有类参数的编译时错误
- 如果编译时间构量参数是错误的,则生成编译时错误
- 尝试调用指向成员函数的函数指针时出现编译时错误
- 编译时错误:删除了联合默认构造函数
- 初始化启动对象时出现编译时错误
- 如果在C++中将成员添加到类中,则会导致编译时错误的技术
- 如何设计可序列化类以使任何非序列化属性都会导致编译时错误