【发布时间】:2018-01-17 04:03:17
【问题描述】:
我在这里缺少什么?为什么我不能使用 decltype 来定义迭代器的 value_type?当我使用 decltype 而不是 iterator_traits 时,下面的代码会出现难以理解的编译时错误,但前提是我还使用 value_type 来声明向量。
Visual Studio 2017,C++17 修订版。 15.6 预览
#include <vector>
template<class Ptr >
void foo(Ptr beg) {
*beg = 1; // Cool, babies.
// using value_type = decltype(*beg); // COMPILER ERROR when buf declared below
using value_type = typename std::iterator_traits<Ptr>::value_type;
std::vector<value_type> buf(1); // Remove this and decltype compiles.
}
int main() {
std::vector<int> bar(1);
foo(std::begin(bar));
*(std::begin(bar)) = 1;
return 0;
}
根据要求...
error C2528: 'const_pointer': pointer to reference is illegal
【问题讨论】:
-
在问题中包含完整的编译器错误会很有帮助。
-
@chris - 我对此表示怀疑,但没关系。
-
有人仁慈地删除了除第一行错误之外的所有错误。
-
decltype(*beg)给出int&,而不是int。 -
@O'Neil - 啊哈。现在该怎么办?我宁愿避免 iterator_traits...
标签: c++ templates visual-c++ decltype c++17