I strongly believe, that the main reason why `span` is strongly constrained initially is exactly the same why `vector` didn't allow incomplete element type before C++11 -- it was just easier to add one strong constraint than elaborate what methods could work with incomplete element type and what ones couldn't.

On Thu, Jul 6, 2023 at 6:27 PM Jason McKesson via Std-Proposals <std-proposals@lists.isocpp.org> wrote:
On Thu, Jul 6, 2023 at 2:50 AM Andrey Davydov via Std-Proposals
<std-proposals@lists.isocpp.org> wrote:
>
> Hello everyone!
>
> I'd like to propose a support span of elements of incomplete type.
> The draft of the proposal (https://github.com/AndreyG/cpp-papers/blob/main/span-of-incomplete-element-type.md) contains motivation. What do you think about it?

The proposal needs to investigate why the limitation exists at all. I
didn't know about it until you brought it up. You should spend some
time looking into older versions of `span` or asking the people who
made those proposals why the type is required to be complete.

There could be some good-yet-esoteric reason why this limitation is here.
--
Std-Proposals mailing list
Std-Proposals@lists.isocpp.org
https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals

--
Andrey Davydov