1. Background
[P0009R18] added 
The length of each dimension (the extent) of an 
// All static. mdspan < int , 64 , 64 , 64 > a ( d ); // All dynamic. mdspan < int , dynamic_extent , dynamic_extent , dynamic_extent > a ( d , 64 , 64 , 64 ); // Mixed static and dynamic. mdspan < int , 64 , dynamic_extent , 64 > a ( d , 64 ); 
[P2299R3] sought to make 
mdspan a ( d , 64 , 64 ); // All dynamic. 
However, CTAD does not help in all situations. If you are declaring a member of a class or a parameter to a function, you cannot use CTAD.
struct X { std :: mdspan < int , std :: dynamic_extent , std :: dynamic_extent , std :: dynamic_extent > a ; }; void f ( std :: mdspan < int , std :: dynamic_extent , std :: dynamic_extent , std :: dynamic_extent > a ); 
To simplify these cases, [P2299R3] also added 
template < std :: size_t N > using dextents = /* ... */ ; struct X { std :: mdspan < int , std :: dextents < 3 >> a ; }; void f ( mdspan < int , std :: dextents < 3 >> a ); 
2. Problem
Originally, 
As a part of this change, an index type template parameter was added to 
template < typename IndexType , std :: size_t Rank > using dextents = /* ... */ 
This change has made using 
struct X { std :: mdspan < int , std :: dextents < std :: size_t , 3 >> a ; }; void f ( mdspan < int , std :: dextents < std :: size_t , 3 >> a ); 
Index type customization is an important feature for 
3. Proposed Changes
Remove the index type parameter from 
MSVC’s STL and LLVM’s libc++ are already shipping 
So, modifying 
Alternatively and more practically, we could leave