C++ Utility Library - declval Function



Description

It returns an rvalue reference to type T without referring to any object.

Declaration

Following is the declaration for std::declval function.

 template <class T> typename add_rvalue_reference<T>::type declval() noexcept; 

C++11

 template <class T> typename add_rvalue_reference<T>::type declval() noexcept; 

Parameters

a, b − These are two objects.

Return Value

It returns an rvalue reference to type T without referring to any object.

Exceptions

Basic guarantee − if the construction or assignment of type T throws.

Data races

Calling this function introduces no data races.

Example

In below example explains about std::declval function.

 #include <utility> #include <iostream> struct A { virtual int value() = 0; }; class B : public A { int val_; public: B(int i,int j):val_(i*j){} int value() {return val_;} }; int main() { decltype(std::declval<A>().value()) a; decltype(std::declval<B>().value()) b; a = b = B(100,20).value(); std::cout << a << '\n'; return 0; } 

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

 2000 
utility.htm
Advertisements