use*_*729 3 c++ decltype c++11
我试图理解declval<T>()和之间的区别declval<T&>()?有T&可以使用而T不能使用的例子吗?
#include <type_traits>
#include <utility>
struct X {
X() = delete;
int func();
};
int main()
{
// works with both X as well as X& within declval
static_assert(std::is_same_v<decltype(std::declval<X&>().func()), int>);
}
Run Code Online (Sandbox Code Playgroud)
除了 ref 限定的成员函数(很少使用)之外,更常见的用例std::declval<T&>()是创建左值引用(否则它会创建右值引用)。
#include <type_traits>
#include <utility>
struct X {};
int func(X&);
int main() {
static_assert(std::is_same_v<decltype(func(std::declval<X&>())), int>); // works
static_assert(std::is_same_v<decltype(func(std::declval<X>())), int>); // error
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
438 次 |
| 最近记录: |