Namespaces
Variants
Actions

std::ranges::ssize

From cppreference.com
< cpp‎ | ranges
 
 
Ranges library
Range adaptors
 
Defined in header <ranges>
Defined in header <iterator>
inlinenamespace/* unspecified */{

    inlineconstexpr/* unspecified */ ssize =/* unspecified */;

}
(since C++20)
(customization point object)
Call signature
template<class T >

    requires /* see below */

constexprauto ssize( T&& t );
(since C++20)

Calculates the number of elements in t in constant time, and converts the result to a signed type.

Given the subexpression of which t denotes the (possibly materialized) result object as E:

Contents

Customization point objects

The name ranges::ssize denotes a customization point object, which is a const function object of a literalsemiregular class type. See CustomizationPointObject for details.

[edit]Notes

If ranges::ssize(e) is valid for an expression e, the return type is a signed-integer-like type.

[edit]Example

#include <array>#include <iostream>#include <ranges>#include <type_traits>   int main(){std::array arr{1, 2, 3, 4, 5};auto s = std::ranges::ssize(arr);   std::cout<<"ranges::ssize(arr) = "<< s <<'\n'<<"ranges::ssize is "<<(std::is_signed_v<decltype(s)>?"signed":"unsigned")<<'\n';   std::cout<<"reversed arr: ";   for(--s; s >=0;--s)std::cout<< arr[s]<<' ';   std::cout<<"\n""s = "<< s <<'\n';}

Output:

ranges::ssize(arr) = 5 ranges::ssize is signed reversed arr: 5 4 3 2 1 s = -1

[edit]Defect reports

The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

DR Applied to Behavior as published Correct behavior
LWG 3403C++20 ranges::size worked for some non-range types but ranges::ssize did not made work

[edit]See also

returns an integer equal to the size of a range
(customization point object)[edit]
specifies that a range knows its size in constant time
(concept)[edit]
returns the distance between an iterator and a sentinel, or between the beginning and end of a range
(algorithm function object)[edit]
(C++17)(C++20)
returns the size of a container or array
(function template)[edit]
close