nd  ](http://en.cppreference.com/w/cpp/ranges-ranges-placeholder/end) (  [ std::  declval  ](http://en.cppreference.com/w/cpp/utility/declval) < R  & > (  )  )  )  ;  |  (3)  |  (since C++20)   
template  < [ ranges::  range
](http://en.cppreference.com/w/cpp/ranges/range) R  >  
using  const_sentinel_t  =  decltype  (  [ ranges::  cend  ](http://en.cppreference.com/w/cpp/ranges-ranges-placeholder/cend) (  [ std::  declval  ](http://en.cppreference.com/w/cpp/utility/declval) < R  & > (  )  )  )  ;  |  (4)  |  (since C++23)   
template  < [ ranges::  sized_range
](http://en.cppreference.com/w/cpp/ranges/sized_range) R  >  
using  range_size_t  =  decltype  (  [ ranges::  size  ](http://en.cppreference.com/w/cpp/ranges/size) (  [ std::  declval  ](http://en.cppreference.com/w/cpp/utility/declval) < R  & > (  )  )  )  ;  |  (5)  |  (since C++20)   
template  < [ ranges::  range
](http://en.cppreference.com/w/cpp/ranges/range) R  >  
using  range_difference_t  =  [ std::  iter_difference_t  ](http://en.cppreference.com/w/cpp/iterator/iter_t) < [ ranges::  iterator_t  ](http://en.cppreference.com/w/cpp/ranges-ranges-placeholder/iterator_t) < R  >> ;  |  (6)  |  (since C++20)   
template  < [ ranges::  range
](http://en.cppreference.com/w/cpp/ranges/range) R  >  
using  range_value_t  =  [ std::  iter_value_t  ](http://en.cppreference.com/w/cpp/iterator/iter_t) < [ ranges::  iterator_t  ](http://en.cppreference.com/w/cpp/ranges-ranges-placeholder/iterator_t) < R  >> ;  |  (7)  |  (since C++20)   
template  < [ ranges::  range
](http://en.cppreference.com/w/cpp/ranges/range) R  >  
using  range_reference_t  =  [ std::  iter_reference_t  ](http://en.cppreference.com/w/cpp/iterator/iter_t) < [ ranges::  iterator_t  ](http://en.cppreference.com/w/cpp/ranges-ranges-placeholder/iterator_t) < R  >> ;  |  (8)  |  (since C++20)   
template  < [ ranges::  range
](http://en.cppreference.com/w/cpp/ranges/range) R  >  
using  range_const_reference_t  =  
[ std::  iter_const_reference_t  ](http://en.cppreference.com/w/cpp/iterator/iter_t) < [ ranges::  iterator_t  ](http://en.cppreference.com/w/cpp/ranges-ranges-placeholder/iterator_t) < R  >> ;  |  (9)  |  (since C++23)   
template  < [ ranges::  range
](http://en.cppreference.com/w/cpp/ranges/range) R  >  
using  range_rvalue_reference_t  =  
[ std::  iter_rvalue_reference_t  ](http://en.cppreference.com/w/cpp/iterator/iter_t) < [ ranges::  iterator_t  ](http://en.cppreference.com/w/cpp/ranges-ranges-placeholder/iterator_t) < R  >> ;  |  (10)  |  (since C++20)   
template  < [ ranges::  range
](http://en.cppreference.com/w/cpp/ranges/range) R  >  
using  range_common_reference_t  =  
[ std::  iter_common_reference_t  ](http://en.cppreference.com/w/cpp/iterator/iter_t) < [ ranges::  iterator_t  ](http://en.cppreference.com/w/cpp/ranges-ranges-placeholder/iterator_t) < R  >> ;  |  (11)  |  (since C++20)   
|  |   
  
1)  Used to obtain the iterator type of the type ` T ` .

2)  Used to obtain the constant iterator type of the [ ` range `
](/w/cpp/ranges/range "cpp/ranges/range") type ` R ` .

3)  Used to obtain the sentinel type of the range type ` R ` .

4)  Used to obtain the constant sentinel type of the range type ` R ` .

5)  Used to obtain the size type of the [ ` sized_range `
](/w/cpp/ranges/sized_range "cpp/ranges/sized range") type ` R ` .

6)  Used to obtain the difference type of the iterator type of range type ` R
` .

7)  Used to obtain the value type of the iterator type of range type ` R ` .

8)  Used to obtain the reference type of the iterator type of range type ` R `
.

9)  Used to obtain the constant reference type of the iterator type of range
type ` R ` .

10)  Used to obtain the rvalue reference type of the iterator type of range
type ` R ` .

11)  Used to obtain the common reference type of the iterator type of range
type ` R ` .

##  Contents

  * 1  Template parameters 
  * 2  Notes 
  * 3  Defect reports 
  * 4  See also 

  
---  
  
###  [ [ edit
](/mwiki/index.php?ti