---
name: "std::complex"
section: "3"
platform: "linux"
package: "gcc"
version: "16.2.1+r23+gd564253eb6c8-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/std::complex"
---

# std::complex(3)

## NAME

std::complex\< \_Tp \>

## SYNOPSIS

\#include \<complex\>

### Public Types

typedef \_Tp **value\_type**\
 Value typedef.

### Public Member Functions

constexpr **complex** (const \_Tp &\_\_r=\_Tp(), const \_Tp &\_\_i=\_Tp())\
 Default constructor. First parameter is x, second parameter is y. Unspecified parameters default to 0.  constexpr **complex** (const complex &)=default\
 constexpr **complex** **\_\_rep** () const\
 template\<typename \_Up\> **explicit** (!requires(\_Up \_\_u) { \_Tp{\_\_u};}) const expr **complex**(const **complex**\< \_Up \> &\_\_z)\
 Converting constructor.  constexpr \_Tp **imag** () const\
 constexpr void **imag** (\_Tp \_\_val)\
 constexpr **complex**\< \_Tp \> & **operator\*=** (const \_Tp &)\
 Multiply this complex number by a scalar.  template\<typename \_Up\> constexpr **complex**\< \_Tp \> & **operator\*=** (const **complex**\< \_Up \> &)\
 Multiply this complex number by another.  constexpr **complex**\< \_Tp \> & **operator+=** (const \_Tp &\_\_t)\
 Add a scalar to this complex number.  template\<typename \_Up\> constexpr **complex**\< \_Tp \> & **operator+=** (const **complex**\< \_Up \> &)\
 Add another complex number to this one.  constexpr **complex**\< \_Tp \> & **operator-=** (const \_Tp &\_\_t)\
 Subtract a scalar from this complex number.  template\<typename \_Up\> constexpr **complex**\< \_Tp \> & **operator-=** (const **complex**\< \_Up \> &)\
 Subtract another complex number from this one.  constexpr **complex**\< \_Tp \> & **operator/=** (const \_Tp &)\
 Divide this complex number by a scalar.  template\<typename \_Up\> constexpr **complex**\< \_Tp \> & **operator/=** (const **complex**\< \_Up \> &)\
 Divide this complex number by another.  constexpr **complex**\< \_Tp \> & **operator=** (const \_Tp &)\
 Assign a scalar to this complex number.  constexpr **complex** & **operator=** (const **complex** &)=default\
 template\<typename \_Up\> constexpr **complex**\< \_Tp \> & **operator=** (const **complex**\< \_Up \> &)\
 Assign another complex number to this one.  constexpr \_Tp **real** () const\
 constexpr void **real** (\_Tp \_\_val)\

## Detailed Description

### template\<typename \_Tp\>

class std::complex\< \_Tp \>"Template to represent complex numbers.

Specializations for float, double, and long double are part of the library. Results with any other type are not guaranteed.

**Parameters**

*Tp* Type of real and imaginary values.

## Member Typedef Documentation

### template\<typename \_Tp\> typedef \_Tp std::complex\< \_Tp \>::value\_type

Value typedef.

## Constructor & Destructor Documentation

### template\<typename \_Tp\> std::complex\< \_Tp \>::complex (const \_Tp & \_\_r = \_Tp(), const \_Tp & \_\_i = \_Tp()) \[inline\], \[constexpr\]

Default constructor. First parameter is x, second parameter is y. Unspecified parameters default to 0.

Referenced by **operator\*=()**, **operator\*=()**, **operator+=()**, **operator-=()**, **operator/=()**, **operator/=()**, **operator=()**, and **operator=()**.

## Member Function Documentation

### template\<typename \_Tp\> template\<typename \_Up\> std::complex\< \_Tp \>::explicit (!requires(\_Up \_\_u) { \_Tp{\_\_u};} ) const & \[inline\]

Converting constructor.

### template\<typename \_Tp\> complex\< \_Tp \> & std::complex\< \_Tp \>::operator\*= (const \_Tp & ) \[constexpr\]

Multiply this complex number by a scalar.

References **complex()**.

### template\<typename \_Tp\> template\<typename \_Up\> complex\< \_Tp \> & std::complex\< \_Tp \>::operator\*= (const complex\< \_Up \> & ) \[constexpr\]

Multiply this complex number by another.

References **complex()**.

### template\<typename \_Tp\> complex\< \_Tp \> & std::complex\< \_Tp \>::operator+= (const \_Tp & \_\_t) \[inline\], \[constexpr\]

Add a scalar to this complex number.

### template\<typename \_Tp\> template\<typename \_Up\> complex\< \_Tp \> & std::complex\< \_Tp \>::operator+= (const complex\< \_Up \> & ) \[constexpr\]

Add another complex number to this one.

References **complex()**.

### template\<typename \_Tp\> complex\< \_Tp \> & std::complex\< \_Tp \>::operator-= (const \_Tp & \_\_t) \[inline\], \[constexpr\]

Subtract a scalar from this complex number.

### template\<typename \_Tp\> template\<typename \_Up\> complex\< \_Tp \> & std::complex\< \_Tp \>::operator-= (const complex\< \_Up \> & ) \[constexpr\]

Subtract another complex number from this one.

References **complex()**.

### template\<typename \_Tp\> complex\< \_Tp \> & std::complex\< \_Tp \>::operator/= (const \_Tp & ) \[constexpr\]

Divide this complex number by a scalar.

References **complex()**.

### template\<typename \_Tp\> template\<typename \_Up\> complex\< \_Tp \> & std::complex\< \_Tp \>::operator/= (const complex\< \_Up \> & ) \[constexpr\]

Divide this complex number by another.

References **complex()**.

### template\<typename \_Tp\> complex\< \_Tp \> & std::complex\< \_Tp \>::operator= (const \_Tp & ) \[constexpr\]

Assign a scalar to this complex number.

References **complex()**.

### template\<typename \_Tp\> template\<typename \_Up\> complex\< \_Tp \> & std::complex\< \_Tp \>::operator= (const complex\< \_Up \> & ) \[constexpr\]

Assign another complex number to this one.

References **complex()**.

## Author

Generated automatically by Doxygen for libstdc++ from the source code.
