he size of a range   
(customization point object)  [ [edit]
](https://en.cppreference.com/mwiki/index.php?title=Template:cpp/ranges/dsc_ssize&action=edit)  
[ ranges::empty  ](/w/cpp/ranges/empty "cpp/ranges/empty") (C++20)  |  checks whether a range is empty   
(customization point object)  [ [edit]
](https://en.cppreference.com/mwiki/index.php?title=Template:cpp/ranges/dsc_empty&action=edit)  
[ ranges::data  ](/w/cpp/ranges/data "cpp/ranges/data") (C++20)  |  obtains a pointer to the beginning of a contiguous range   
(customization point object)  [ [edit]
](https://en.cppreference.com/mwiki/index.php?title=Template:cpp/ranges/dsc_data&action=edit)  
[ ranges::cdata  ](/w/cpp/ranges/cdata "cpp/ranges/cdata") (C++20)  |  obtains a pointer to the beginning of a read-only contiguous range   
(customization point object)  [ [edit]
](https://en.cppreference.com/mwiki/index.php?title=Template:cpp/ranges/dsc_cdata&action=edit)  
  
#####  Range primitives  
  
Defined in header ` [ <ranges> ](/w/cpp/header/ranges "cpp/header/ranges") `  
[ ranges::iterator_t  ranges::const_iterator_t  ranges::sentinel_t  ranges::const_sentinel_t  ranges::range_difference_t  ranges::range_size_t  ranges::range_value_t  ranges::range_reference_t  ranges::range_const_reference_t  ranges::range_rvalue_reference_t  ranges::range_common_reference_t  ](/w/cpp/ranges/iterator_t "cpp/ranges/iterator t") (C++20)  (C++23)  (C++20)  (C++23)  (C++20)  (C++20)  (C++20)  (C++20)  (C++23)  (C++20)  (C++20)  |  obtains associated types of a range   
(alias template)  [ [edit]
](https://en.cppreference.com/mwiki/index.php?title=Template:cpp/ranges/dsc_iterator_t&action=edit)  
  
#####  Dangling iterator handling  
  
Defined in header ` [ <ranges> ](/w/cpp/header/ranges "cpp/header/ranges") `  
[ ranges::dangling  ](/w/cpp/ranges/dangling "cpp/ranges/dangling") (C++20)  |  a placeholder type indicating that an iterator or a ` subrange ` should not be returned since it would be dangling   
(class)  [ [edit]
](https://en.cppreference.com/mwiki/index.php?title=Template:cpp/ranges/dsc_dangling&action=edit)  
[ ranges::borrowed_iterator_t  ranges::borrowed_subrange_t  ](/w/cpp/ranges/borrowed_iterator_t "cpp/ranges/borrowed iterator t") (C++20)  |  obtains iterator type or ` subrange ` type of a [ ` borrowed_range ` ](/w/cpp/ranges/borrowed_range "cpp/ranges/borrowed range")   
(alias template)  [ [edit]
](https://en.cppreference.com/mwiki/index.php?title=Template:cpp/ranges/dsc_borrowed_iterator_t&action=edit)  
  
#####  Range concepts  
  
Defined in header ` [ <ranges> ](/w/cpp/header/ranges "cpp/header/ranges") `  
[ ranges::range  ](/w/cpp/ranges/range "cpp/ranges/range") (C++20)  |  specifies that a type is a range, that is, it provides a ` begin ` iterator and an ` end ` sentinel   
(concept)  [ [edit]
](https://en.cppreference.com/mwiki/index.php?title=Template:cpp/ranges/dsc_range&action=edit)  
[ ranges::borrowed_range  ](/w/cpp/ranges/borrowed_range "cpp/ranges/borrowed range") (C++20)  |  specifies that a type is a [ ` range ` ](/w/cpp/ranges/range "cpp/ranges/range") and iterators obtained from an expression of it can be safely returned without danger of dangling   
(concept)  [ [edit]
](https://en.cppreference.com/mwiki/index.php?title=Template:cpp/ranges/dsc_borrowed_range&action=edit)  
[ ranges::sized_range  ](/w/cpp/ranges/sized_range "cpp/ranges/sized range") (C++20)  |  specifies that a range knows its size in constant time   
(concept)  [ [edit]
](https://en.cppreference.com/mwiki/index.php?title=Template:cpp/ranges/dsc_sized_range&action=edit)  
[ ranges::view  ](/w/cpp/ranges/view "cpp/ranges/view") (C++20)  |  specifies that a range is a view, that is, it has constant time copy/move/assignment   
(concept)  [ [edit]
](https://en.cppreference.com/mwiki/index.php?title=Template:cpp/ranges/dsc_view&action=edit)  
[ ranges::input_range  ](/w/cpp/ranges/input_range "cpp/ranges/input range") (C++20)  |  specifies a range whose iterator type satisfie