只是declval<T>()
替代(*(T*)NULL)
在 decltype 中获取 T 的实例而不需要担心 T 的构造函数的旧技巧吗?
这是一些示例代码:
struct A {};
struct B {
A a;
};
typedef decltype((*(B*)nullptr).a) T1;
typedef decltype(declval<B>().a) T2;
cout << "is_same: " << is_same<T1, T2>::value << endl;
打印 1 因为 T1 和 T2 是相同的类型。
如果 declval 不仅仅是替代品,那么有什么区别,它在哪里有用?