4

次のコードを検討してください。

#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
      |    ^~~~~~~~

問題はどこだ?

4

1 に答える 1