forward_range "cpp/ranges/forward range") , [ `
bidirectional_range ` ](/w/cpp/ranges/bidirectional_range
"cpp/ranges/bidirectional range") , [ ` random_access_range `
](/w/cpp/ranges/random_access_range "cpp/ranges/random access range") , or [ `
sized_range ` ](/w/cpp/ranges/sized_range "cpp/ranges/sized range") if all
adapted [ ` view ` ](/w/cpp/ranges/view "cpp/ranges/view") types model the
corresponding concept.

` zip_view ` models [ ` common_range ` ](/w/cpp/ranges/common_range
"cpp/ranges/common range") if

  * sizeof...  (  Views  )  is equal to  1  , and the only adapted view type models [ ` common_range ` ](/w/cpp/ranges/common_range "cpp/ranges/common range") , or 
  * at least one adapted view type does not model [ ` bidirectional_range ` ](/w/cpp/ranges/bidirectional_range "cpp/ranges/bidirectional range") , and every adapted view type models [ ` common_range ` ](/w/cpp/ranges/common_range "cpp/ranges/common range") , or 
  * every adapted view type models both [ ` random_access_range ` ](/w/cpp/ranges/random_access_range "cpp/ranges/random access range") and [ ` sized_range ` ](/w/cpp/ranges/sized_range "cpp/ranges/sized range") . 

##  Contents

  * 1  Customization point objects 
  * 2  Data members 
  * 3  Member functions 
    * 3.1  Inherited from  std::ranges::view_interface 
  * 4  Deduction guides 
  * 5  Nested classes 
  * 6  Helper templates 
  * 7  Notes 
  * 8  Example 
  * 9  See also 

  
---  
  
###  Customization point objects

The name ` views::zip ` denotes a _customization point object_ , which is a
const [ function object ](/w/cpp/named_req/FunctionObject "cpp/named
req/FunctionObject") of a [ literal ](/w/cpp/named_req/LiteralType "cpp/named
req/LiteralType") [ ` semiregular ` ](/w/cpp/concepts/semiregular
"cpp/concepts/semiregular") class type. For exposition purposes, the cv-
unqualified version of its type is denoted as ` ___zip_fn_ ` .

All instances of ` ___zip_fn_ ` are equal. The effects of invoking different
instances of type ` ___zip_fn_ ` on the same arguments are equivalent,
regardless of whether the expression denoting the instance is an lvalue or
rvalue, and is const-qualified or not (however, a volatile-qualified instance
is not required to be invocable). Thus, ` views::zip ` can be copied freely
and its copies can be used interchangeably.

Given a set of types ` Args... ` , if  [ std::  declval
](http://en.cppreference.com/w/cpp/utility/declval) < Args  > (  )  ...  meet
the requirements for arguments to ` views::zip ` above, ` ___zip_fn_ ` models  

  * [ std::  invocable  ](http://en.cppreference.com/w/cpp/concepts/invocable) < __zip_fn, Args...  > , 
  * [ std::  invocable  ](http://en.cppreference.com/w/cpp/concepts/invocable) < const  __zip_fn, Args...  > , 
  * [ std::  invocable  ](http://en.cppreference.com/w/cpp/concepts/invocable) < __zip_fn  & , Args...  > , and 
  * [ std::  invocable  ](http://en.cppreference.com/w/cpp/concepts/invocable) < const  __zip_fn  & , Args...  > .   

Otherwise, no function call operator of ` ___zip_fn_ ` participates in
overload resolution.

###  [ [ edit
](/mwiki/index.php?title=cpp/ranges/zip_view&action=edit&section=1 "Edit
section: Data members") ]  Data members

Member object  |  Definition   
---|---  
` _views__ ` (private)  |  A tuple of type  [ std::  tuple  ](http://en.cppreference.com/w/cpp/utility/tuple) < Views...  > that holds all adapted view objects.   
(  exposition-only member object*  )  
  
###  [ [ edit
](/mwiki/index.php?title=cpp/ranges/zip_view&action=edit&section=2 "Edit
section: Member functions") ]  Member functions

[ (constructor)  ](/w/cpp/ranges/zip_view/zip_view "cpp/ranges/zip view/zip view") (C++23)  |  constructs a ` zip_view `   
(public member function)  [ [edit]
](https://en.cppreference.com/mwiki/index.php?title=Template:cpp/ranges/adaptor/dsc_constructor&action=edit)  
---|---  
[ begin  ](/w/cpp/ranges/zip_view/begin "cpp/ranges/zip view/begin") (C++23)  |  returns an iterator to the beginning