【发布时间】:2013-01-17 09:39:37
【问题描述】:
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 不仅仅是替代品,有什么区别,它在哪里有用?
【问题讨论】:
-
当
T是引用类型时,你的老把戏还有效吗?