s [ ` input_iterator ` ](/w/cpp/iterator/input_iterator "cpp/iterator/input iterator")   
(concept)  [ [edit]
](https://en.cppreference.com/mwiki/index.php?title=Template:cpp/ranges/dsc_input_range&action=edit)  
[ ranges::output_range  ](/w/cpp/ranges/output_range "cpp/ranges/output range") (C++20)  |  specifies a range whose iterator type satisfies [ ` output_iterator ` ](/w/cpp/iterator/output_iterator "cpp/iterator/output iterator")   
(concept)  [ [edit]
](https://en.cppreference.com/mwiki/index.php?title=Template:cpp/ranges/dsc_output_range&action=edit)  
[ ranges::forward_range  ](/w/cpp/ranges/forward_range "cpp/ranges/forward range") (C++20)  |  specifies a range whose iterator type satisfies [ ` forward_iterator ` ](/w/cpp/iterator/forward_iterator "cpp/iterator/forward iterator")   
(concept)  [ [edit]
](https://en.cppreference.com/mwiki/index.php?title=Template:cpp/ranges/dsc_forward_range&action=edit)  
[ ranges::bidirectional_range  ](/w/cpp/ranges/bidirectional_range "cpp/ranges/bidirectional range") (C++20)  |  specifies a range whose iterator type satisfies [ ` bidirectional_iterator ` ](/w/cpp/iterator/bidirectional_iterator "cpp/iterator/bidirectional iterator")   
(concept)  [ [edit]
](https://en.cppreference.com/mwiki/index.php?title=Template:cpp/ranges/dsc_bidirectional_range&action=edit)  
[ ranges::random_access_range  ](/w/cpp/ranges/random_access_range "cpp/ranges/random access range") (C++20)  |  specifies a range whose iterator type satisfies [ ` random_access_iterator ` ](/w/cpp/iterator/random_access_iterator "cpp/iterator/random access iterator")   
(concept)  [ [edit]
](https://en.cppreference.com/mwiki/index.php?title=Template:cpp/ranges/dsc_random_access_range&action=edit)  
[ ranges::contiguous_range  ](/w/cpp/ranges/contiguous_range "cpp/ranges/contiguous range") (C++20)  |  specifies a range whose iterator type satisfies [ ` contiguous_iterator ` ](/w/cpp/iterator/contiguous_iterator "cpp/iterator/contiguous iterator")   
(concept)  [ [edit]
](https://en.cppreference.com/mwiki/index.php?title=Template:cpp/ranges/dsc_contiguous_range&action=edit)  
[ ranges::common_range  ](/w/cpp/ranges/common_range "cpp/ranges/common range") (C++20)  |  specifies that a range has identical iterator and sentinel types   
(concept)  [ [edit]
](https://en.cppreference.com/mwiki/index.php?title=Template:cpp/ranges/dsc_common_range&action=edit)  
[ ranges::viewable_range  ](/w/cpp/ranges/viewable_range "cpp/ranges/viewable range") (C++20)  |  specifies the requirements for a [ ` range ` ](/w/cpp/ranges/range "cpp/ranges/range") to be safely convertible to a [ ` view ` ](/w/cpp/ranges/view "cpp/ranges/view")   
(concept)  [ [edit]
](https://en.cppreference.com/mwiki/index.php?title=Template:cpp/ranges/dsc_viewable_range&action=edit)  
[ ranges::constant_range  ](/w/cpp/ranges/constant_range "cpp/ranges/constant range") (C++23)  |  specifies that a range has read-only elements   
(concept)  [ [edit]
](https://en.cppreference.com/mwiki/index.php?title=Template:cpp/ranges/dsc_constant_range&action=edit)  
  
#####  Range conversions  
  
Defined in header ` [ <ranges> ](/w/cpp/header/ranges "cpp/header/ranges") `  
[ ranges::to  ](/w/cpp/ranges/to "cpp/ranges/to") (C++23)  |  constructs a new non-view object from an input range   
(function template)  [ [edit]
](https://en.cppreference.com/mwiki/index.php?title=Template:cpp/ranges/dsc_to&action=edit)  
  
#####  Views  
  
Defined in header ` [ <ranges> ](/w/cpp/header/ranges "cpp/header/ranges") `  
[ ranges::view_interface  ](/w/cpp/ranges/view_interface "cpp/ranges/view interface") (C++20)  |  helper class template for defining a [ ` view ` ](/w/cpp/ranges/view "cpp/ranges/view") , using the [ curiously recurring template pattern ](/w/cpp/language/crtp "cpp/language/crtp")   
(class template)  [ [edit]
](https://en.cppreference.com/mwiki/index.php?title=Template:cpp/ranges/dsc_view_interface&action=edit)  
[ ranges::subrange  ](/w/cpp/ranges/subrange "cpp/ranges