[ Web Proxy ]
URL:
Viewing: https://ru.cppreference.com/cpp/utility/declval [Back]  [Original]

std::declval cppreference.com
cppreference.com

std::declval

cppreference.com
<tbody> </tbody>
template<class T> typename std::add_rvalue_reference<T>::type declval() noexcept;
( C++11)

T , - decltype .

std::declval , , -, .

, std::declval ; , , . , odr.

()

. T&&, T (, cv-) void, T.

template<typename T>
typename std::add_rvalue_reference<T>::type declval() noexcept
{
    static_assert(false, "declval     ");
}

#include <iostream>
#include <utility>

struct Default
{
    int foo() const { return 1; }
};

struct NonDefault
{
    NonDefault() = delete;
    int foo() const { return 1; }
};

int main()
{
    decltype(Default().foo()) n1 = 1;     //  n1  int
//  decltype(NonDefault().foo()) n2 = n1; // :    
    decltype(std::declval<NonDefault>().foo()) n2 = n1; //  n2  int
    std::cout << "n1 = " << n1 << '\n'
              << "n2 = " << n2 << '\n';
}

:

n1 = 1
n2 = 1

decltype(C++11) []
(C++11)( C++20)(C++17)

( ) []

Web Proxy Viewer  |  New URL  |  Original Page