https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96830
--- Comment #8 from Jonathan Wakely <redi at gcc dot gnu.org> --- No, I don't think so. Libstdc++ has this for the primary template: template<view _Vp> requires input_range<_Vp> class chunk_view : public view_interface<chunk_view<_Vp>> { ... class _OuterIter; class _InnerIter; And then: template<view _Vp> requires input_range<_Vp> class chunk_view<_Vp>::_OuterIter and: template<view _Vp> requires input_range<_Vp> class chunk_view<_Vp>::_InnerIter Then there is a partial specialization for forward_ranges: template<view _Vp> requires forward_range<_Vp> class chunk_view<_Vp> : public view_interface<chunk_view<_Vp>> { ... template<bool> class _Iterator; and its iterator type: template<view _Vp> requires forward_range<_Vp> template<bool _Const> class chunk_view<_Vp>::_Iterator Clang is complaining about the latter, but it's right.