C++ Range-V3:获取基本迭代器

C++ Range-V3:获取基本迭代器,c++,c++14,range-v3,C++,C++14,Range V3,我尝试使用Range-V3库(用于MSVC),但由于缺乏文档,我不知道如何做一件事 std::map<int, std::wstring> ss = { {1,L"1"}, {2,L"2"}, {3,L"3"} }; auto rng = ss | ranges::view::reverse | ranges::view::values; auto it = ranges::find_if(rng, [](auto&&x) {return x == L"2"; });

我尝试使用Range-V3库(用于MSVC),但由于缺乏文档,我不知道如何做一件事

std::map<int, std::wstring> ss = { {1,L"1"}, {2,L"2"}, {3,L"3"} };
auto rng = ss | ranges::view::reverse | ranges::view::values;
auto it = ranges::find_if(rng, [](auto&&x) {return x == L"2"; });
if (it != rng.end()) {
    assert(it.base()->first == 2); // this does not compile
}
这看起来像是range-V3中的bug1(或者更确切地说是缺少的特性)。一个简单的解决方法是将代码替换为:

assert((*it.base()).first == 2);
这应该可以工作,因为
basic_迭代器
过载,而
操作符->
则不过载



1如果查看MSVC源代码,您会注意到,
运算符->
没有重载,而原始范围-v3中有一个重载。

您得到的错误是什么?它可能包含有关
It
类型的信息。顺便说一句,你的代码编译并运行得很好。@Holt,我更新了我的问题,但我不能理解它(很遗憾,但事实是这样)。@AlexeySubbota在Github上打开一个应用程序可能是值得的。我现在没有访问MSVC的权限,因此无法正确执行。
assert((*it.base()).first == 2);