std::declval
: cppreference.com
<tbody>
</tbody>
template<class T> typename std::add_rvalue_reference<T>::type declval() noexcept; |
(C++11) | |
T decltype
declval
declval ODR ill-formed
()
T void ( cv void) T T&&
Run this code
#include <utility>
#include <iostream>
struct Default { int foo() const { return 1; } };
struct NonDefault
{
NonDefault(const NonDefault&) { }
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) |
callable () |