P3729R1 — Aligning span and string_view
LEWG
```cpp template<typename T, size_type E = dynamic_extent> struct span { … //runtime subsetting: constexpr span subspan(size_type pos = 0, size_type n = dynamic_extent) const; constexpr span first(size_type count) const; constexpr span last(size_type count) const; … }; template<typename charT, typename traits = char_traits<charT>> struct basic_string_view { … //in place shrinking: constexpr void remove_prefix(size_type n); constexpr void remove_suffix(size_type n); … }; template<typename charT, typename traits = char_traits<charT>> struct basic_string_view { … //runtime subsetting: constexpr basic_string_view substr(size_type pos = 0, size_type n = npos) const; constexpr basic_string_view subview(size_type pos = 0, size_type n = npos) const; constexpr basic_string_view first(size_type count) const; //this proposal constexpr basic_string_view last(size_type count) const; //this proposal //in place shrinking: constexpr void remove_prefix(size_type n); constexpr void remove_suffix(size_type n); … }; template<typename charT, typename traits = char_traits<charT>, typename Allocator = allocator<charT>> struct basic_string { … //runtime subsetting: constexpr basic_string substr(size_type p