std::full_extent, std::full_extent_t
From cppreference.com
C++
Feature test macros (C++20)
Concepts library (C++20)
Metaprogramming library (C++11)
Ranges library (C++20)
Filesystem library (C++17)
Concurrency support library (C++11)
Execution control library (C++26)
Containers library
(C++17)
(C++11)
(C++26)
(C++26)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++23)
(C++23)
(C++23)
(C++23)
(C++20)
(C++23)
Tables
std::mdspan
(C++26)
(C++26)
(C++26)
(C++26)
(C++26)
(C++26)
full_extent
(C++26)
(C++26)
(C++26)
Defined in header
<mdspan>
struct full_extent_t { explicit full_extent_t() = default; };
(1)
(since C++26)
inline constexpr std::full_extent_t full_extent {};
(2)
(since C++26)
1) The class
std::full_extent_t
is a slice specifier type that can be used in std::submdspan.2) The corresponding
std::full_extent
instance of (1) is a slice specifier to indicate full range of indices in the specified extent in std::submdspan.[edit] Example
Run this code
#include <mdspan> #include <print> void print(auto view) { static_assert(view.rank() <= 2); if constexpr (view.rank() == 2) { for (std::size_t i = 0; i != view.extent(0); ++i) { for (std::size_t j = 0; j != view.extent(1); ++j) std::print ("{} ", view[i, j]); std::println (); } } else if constexpr (view.rank() == 1) { for (std::size_t i = 0; i != view.extent(0); ++i) std::print ("{} ", view[i]); std::println (); } else std::println ("{}", view[]); std::println (); } int main() { const char letters []{'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'}; const std::mdspan view(letters, 3, 3); print(view); print(std::submdspan (view, std::full_extent, std::full_extent)); print(std::submdspan (view, std::full_extent, 1)); print(std::submdspan (view, 1, std::full_extent)); print(std::submdspan (view, 2, 1)); }
Possible output:
A B C D E F G H I A B C D E F G H I B E H D E F H