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) |
( ) |