【发布时间】:2021-09-21 21:44:00
【问题描述】:
我正在尝试使用 Microsoft Visual Studio 2019 学习 C++20 中的范围。
我创建了一个函数来将字符串变成小写,并将所有空格替换为“_”。
template <typename R>
auto cpp20_string_to_lowercase_without_spaces( R&& rng )
{
auto view = rng
| std::ranges::views::transform( ::tolower )
| std::ranges::views::common;
std::ranges::replace( view, ' ', '_' );
return view;
}
我收到以下错误:
Error C2672 'operator __surrogate_func': no matching overloaded function found
Error C7602 'std::ranges::_Replace_fn::operator ()': the associated constraints are not satisfied
我尝试使用 view.begin(), view.end() 在调用 std::ranges::replace 之前尝试使用 std::ranges::copy。
是不是我做错了什么?
PS:在项目设置中,我必须选择 Preview - Features from the Latest C++ Working Draft (/std:c++latest),因为在最新版本的 Visual Studio 2019 预览版中使用 ISO C++20 Standard (/std:c++20),我无法在没有编译错误的情况下使用视图。
【问题讨论】: