---
name: "std::reference_wrapper"
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::reference_wrapper"
---

# std::reference\_wrapper(3)

Primary class template for reference\_wrapper.

## NAME

std::reference\_wrapper\< \_Tp \> - Primary class template for reference\_wrapper.

## SYNOPSIS

\#include \<functional\>

### Public Types

typedef \_Tp **type**\

### Public Member Functions

template\<typename \_Up, typename = \_\_not\_same\<\_Up\>, typename = decltype(reference\_wrapper::\_S\_fun(std::declval\<\_Up\>()))\> constexpr **reference\_wrapper** (\_Up &&\_\_uref) noexcept(noexcept(reference\_wrapper::\_S\_fun(**std::declval**\< \_Up \>())))\
 **reference\_wrapper** (const reference\_wrapper &)=default\
 constexpr \_Tp & **get** () const noexcept\
 constexpr **operator \_Tp &** () const noexcept\
 template\<typename... \_Args\> constexpr \_\_invoke\_result\< \_Tp &, \_Args... \>::type **operator()** (\_Args &&... \_\_args) const noexcept(\_\_is\_nothrow\_invocable\< \_Tp &, \_Args... \>::value)\
 reference\_wrapper & **operator=** (const reference\_wrapper &)=default\

### Friends

constexpr auto **operator\<=\>** (reference\_wrapper \_\_x, const \_Tp &\_\_y)\
 constexpr auto **operator\<=\>** (reference\_wrapper \_\_x, reference\_wrapper \_\_y)\
 constexpr auto **operator\<=\>** (reference\_wrapper \_\_x, reference\_wrapper\< const \_Tp \> \_\_y)\
 constexpr bool **operator==** (reference\_wrapper \_\_x, const \_Tp &\_\_y)\
 constexpr bool **operator==** (reference\_wrapper \_\_x, reference\_wrapper \_\_y)\
 constexpr bool **operator==** (reference\_wrapper \_\_x, reference\_wrapper\< const \_Tp \> \_\_y)\

### Related Symbols

(Note that these are not member symbols.)

template\<typename \_Tp\> constexpr reference\_wrapper\< \_Tp \> **ref** (\_Tp &\_\_t) noexcept\
 Denotes a reference should be taken to a variable.  template\<typename \_Tp\> constexpr reference\_wrapper\< const \_Tp \> **cref** (const \_Tp &\_\_t) noexcept\
 Denotes a const reference should be taken to a variable.  template\<typename \_Tp\> constexpr reference\_wrapper\< \_Tp \> **ref** (reference\_wrapper\< \_Tp \> \_\_t) noexcept\
 std::ref overload to prevent wrapping a reference\_wrapper  template\<typename \_Tp\> constexpr reference\_wrapper\< const \_Tp \> **cref** (reference\_wrapper\< \_Tp \> \_\_t) noexcept\
 std::cref overload to prevent wrapping a reference\_wrapper

## Detailed Description

### template\<typename \_Tp\>

class std::reference\_wrapper\< \_Tp \>"Primary class template for reference\_wrapper.

## Friends And Related Symbol Documentation

### template\<typename \_Tp\> reference\_wrapper\< const \_Tp \> cref (const \_Tp & \_\_t) \[related\]

Denotes a const reference should be taken to a variable.

### template\<typename \_Tp\> reference\_wrapper\< const \_Tp \> cref (reference\_wrapper\< \_Tp \> \_\_t) \[related\]

std::cref overload to prevent wrapping a reference\_wrapper

### template\<typename \_Tp\> reference\_wrapper\< \_Tp \> ref (\_Tp & \_\_t) \[related\]

Denotes a reference should be taken to a variable.

### template\<typename \_Tp\> reference\_wrapper\< \_Tp \> ref (reference\_wrapper\< \_Tp \> \_\_t) \[related\]

std::ref overload to prevent wrapping a reference\_wrapper

## Author

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