C++ Utility Library - forward Function


Advertisements

Description

It returns an rvalue reference to arg if arg is not an lvalue reference.

Declaration

Following is the declaration for std::forward function.

template <class T> T&& forward (typename remove_reference<T>::type& arg) noexcept;
template <class T> T&& forward (typename remove_reference<T>::type&& arg) noexcept;

C++11

template <class T> T&& forward (typename remove_reference<T>::type& arg) noexcept;
template <class T> T&& forward (typename remove_reference<T>::type&& arg) noexcept;

Parameters

arg − It is an object.

Return Value

It returns an rvalue reference to arg if arg is not an lvalue reference.

Exceptions

Basic guarantee − This function never throws exceptions.

Data races

none

Example

In below example explains about std::forward function.

#include <utility>
#include <iostream>

void overloaded (const int& x) {std::cout << "[It is a lvalue]";}
void overloaded (int&& x) {std::cout << "[It is a rvalue]";}

template <class T> void fn (T&& x) {
   overloaded (x);
   overloaded (std::forward<T>(x));
}

int main () {
   int a;

   std::cout << "calling fn with lvalue: ";
   fn (a);
   std::cout << '\n';

   std::cout << "calling fn with rvalue: ";
   fn (0);
   std::cout << '\n';

   return 0;
}

Let us compile and run the above program, this will produce the following result −

calling fn with lvalue: [It is a lvalue][It is a lvalue]
calling fn with rvalue: [It is a lvalue][It is a rvalue]
utility.htm
Advertisements