My attempt at an immutable container view in C++
Your view isn't immutable, though immutability might be a property of the underlying object. It's a constant view, meaning the underlying object might change, but not from that view. The canonical way to get a constant view is by the way to use a constant reference, unless the view should erase some of the differences between underlying containers, like std::string_view does.

You are missing .begin(), .end(), .rbegin() and .rend().
Your view is constant, fine, but forcing everyone to explicitly say so for each function-call breaks interface conventions.
The missing functions are the common interface, the ones you provided just optional convenience-functions for calling manually which might not be provided even if possible, and certainly never used in generic code. Take a look at &lt;iterator&gt; and the free functions for accessing any generic range there.