次のコードを検討してください。
#include <cctype>
#include <ranges>
constexpr inline auto filter_upper = std::views::filter(::isupper);
新しい範囲アダプターfilter_upper
は、グローバルな古い c-function::isupper
で正常に動作しますが、 に置き換えるとstd::isupper
、次のコンパイラ エラーが発生しました。
<source>:4:69: error: no match for call to '(const std::ranges::views::__adaptor::_RangeAdaptor<std::ranges::views::<lambda(_Range&&, _Pred&&)> >) (<unresolved overloaded function type>)'
4 | constexpr inline auto filter_upper = std::views::filter(std::isupper);
| ^
In file included from <source>:1:
/opt/compiler-explorer/gcc-10.2.0/include/c++/10.2.0/ranges:1102:4: note: candidate: 'constexpr auto std::ranges::views::__adaptor::_RangeAdaptor<_Callable>::operator()(_Args&& ...) const [with _Args = {}; _Callable = std::ranges::views::<lambda(_Range&&, _Pred&&)>]'
1102 | operator()(_Args&&... __args) const
| ^~~~~~~~
問題はどこだ?