https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99433
--- Comment #6 from Patrick Palka <ppalka at gcc dot gnu.org> --- (In reply to gcc-bugs from comment #5) > Thank you for the fix, but the following code does not compile any more: > > ```c++ > #include <list> > #include <ranges> > > int main() > { > std::list<char> list; > > constexpr auto drop = []<std::ranges::viewable_range urng_t>(urng_t && > urange, size_t drop_size) > { > // does not work: > return std::forward<urng_t>(urange) | std::views::drop(drop_size); > > // does work: > // return std::forward<urng_t>(urange) | std::views::drop(0); > }; > drop(list, 0); > } > ``` > > Should I open a new issue? Reduced: #include <list> #include <ranges> int main() { std::list<char> list; std::views::drop(list, 0ul); } The constraint satisfaction failure diagnostic says: libstdc++-v3/include/std/ranges:2100:10: required for the satisfaction of ‘__can_drop_view<_Range, _Tp>’ [with _Range = std::__cxx11::list<char, std::allocator<char> >&; _Tp = lon g unsigned int] libstdc++-v3/include/std/ranges:2101:6: in requirements [with _Tp = long unsigned int; _Range = std::__cxx11::list<char, std::allocator<char> >&] libstdc++-v3/include/std/ranges:2101:24: note: the required expression ‘drop_view<...auto...>{declval<_Range>(), declval<_Tp>()}’ is invalid, because 2101 | = requires { drop_view{std::declval<_Range>(), std::declval<_Tp>()}; }; | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ but it strangely doesn't explain why the expression is invalid. Turns out if we pass -Wsystem-headers to the command line, then we do get an explanation in the form of a warning: <snip> libstdc++-v3/include/std/ranges:2101:24: warning: narrowing conversion of ‘std::declval<long unsigned int>()’ from ‘long unsigned int’ to ‘std::ranges::range_difference_t<std::ranges::ref_view<std::__cxx11::list<char> > >’ {aka ‘long int’} [-Wnarrowing] So I suppose we're correct to reject the testcase, since narrowing conversions aren't permitted in braced init lists (and views::drop(E, F) is specified to be expression-equivalent to the braced init ranges::drop_view{E, F}). But it's perhaps a frontend bug that we need to pass -Wsystem-headers to get the warning here in the first place; I'll file a PR for this issue.