The static asserts in span<T, N>::front() and span<T, N>::back() are incorrect as they may be triggered from valid code
due to evaluation of a never taken branch.
span<int, 0> foo; if (!foo.empty()) { auto x = foo.front(); }
The problem is that the branch is always evaluated by the compiler creating invalid compile errors for span<T, 0>.