https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111535
--- Comment #2 from Patrick Palka <ppalka at gcc dot gnu.org> --- I'm not 100% sure this is needed or desirable. Doesn't > A range adaptor closure object is a unary function object that accepts a > range argument. imply that a closure object's call operator must already be constrained to take a range, making a range constraint on the pipe operator redundant? That's currently true for all standard range adaptors at least. Your example doesn't seem like a proper range adaptor closure object if it can be invoked on a non-range. And it doesn't seem desirable because why _not_ 'accept X | closure' iff 'closure(X)' is valid?