Daisy S. Hollman
Daisy S. Hollman
To be really production-oriented, we should have a CI system set up and use it as a requirement for merging pull requests.
The cases where `decay()` behavior should differ from `std::to_address()` (which basically delegates to `std::pointer_traits::to_address()`, with some specific exceptions) are *really* esoteric and definitely don't necessitate the extra complexity in `Accessor`....
This is because the primary use case is for constraining algorithms. For instance, the following should be prohibited: ```c++ extern bool foo; struct _my_mapping { /* ... */ static bool...
We don't even require `MoveConstructible` (or even `Destructible`) for the `AccessorPolicy`, which effectively makes it impossible to implement `basic_mdspan` in a reasonable way. The requirements should probably be `DefaultConstructible` and...
There is no reason stride of 0 should be prohibited, but the current paper does.
For instance, the constructor requires you to repeat the extents three times. For a 4D `mdspan` with sizes 20, dynamic, 40, dynamic, this looks like: ```c++ auto s = std::basic_mdspan<...
If you look at `layout_stride` as a polymorphic wrapper that type-erases all kinds of strided layouts (including `layout_left` and `layout_right`), then the converting constructor should enable this erasure.
It is not currently explicit, but by the rules of C++ standard library design it should be.
The layout mapping concept provides no way of getting the unique size.