std::get(std::complex)
From cppreference.com
                    
                                        
                    
                    
                                                            
                    |   Defined in header  <complex>
  | 
||
|   template< std::size_t I > friend constexpr T& get( std::complex<T>& x );  | 
(1) | (since C++26) | 
|   template< std::size_t I > friend constexpr const T& get( const std::complex<T>& x );  | 
(2) | (since C++26) | 
|   template< std::size_t I > friend constexpr T&& get( std::complex<T>&& x );  | 
(3) | (since C++26) | 
|   template< std::size_t I > friend constexpr const T&& get( const std::complex<T>&& x );  | 
(4) | (since C++26) | 
Returns the reference to real or imaginary part from a complex when I == 0 or I == 1, respectively. It is mainly provided for structured binding support.
Parameters
| x | - |  a complex
 | 
Return value
1-4) A reference to the real or imaginary part from the stored one when I == 0 or I == 1, respectively.
Notes
| Feature-test macro | Value | Std | Feature | 
|---|---|---|---|
__cpp_lib_tuple_like | 
202311L | (C++26) | Add tuple protocol to std::complex | 
Example
Run this code
#include <complex> static_assert([z = std::complex(1.0, 2.0)] { #if __cpp_lib_tuple_like >= 202311L return std::get<0>(z) == 1.0 and std::get<1>(z) == 2.0; #else return z.real() == 1.0 and z.imag() == 2.0; #endif }()); int main() {}
See also
| Structured binding (C++17) | binds the specified names to sub-objects or tuple elements of the initializer | 
|    (C++11)  | 
  tuple accesses specified element  (function template)  | 
|    (C++11)  | 
  accesses an element of a pair (function template)  | 
|    (C++11)  | 
  accesses an element of an array (function template)  |