#include template class span { T* ptr_; std::size_t len_; public: using value_type = std::remove_cv_t; //primarily needed if used with templates span(T* ptr, std::size_t len) noexcept : ptr_{ptr}, len_{len} {} T& operator[](int i) noexcept { return *ptr_[i]; } T const& operator[](int i) const noexcept { return *ptr_[i]; } bool empty() const noexcept { return len_ == 0; } auto size() const noexcept { return len_; } auto begin() noexcept { return ptr_; } auto begin() const noexcept { return ptr_; } auto end() noexcept { return ptr_ + len_; } auto end() const noexcept { return ptr_ + len_; } }; static_assert(_MSVC_LANG <= 201703L, "Remember to switch to std::span");