#include<iostream>
using namespace std;
int main() {
int* t;
using T = decltype(*t);
cout << is_integral<T>::value << endl;
return 0;
}
为什么上面的代码会打印0?
#include<iostream>
using namespace std;
int main() {
int* t;
using T = decltype(*t);
cout << is_integral<T>::value << endl;
return 0;
}
*t
是 lvalue 表达式,那么 decltype(*t)
会得到一个引用类型,即 int&
。
b) 如果表达式的值类别是 lvalue,则 decltype 返回
T&
;
你可以使用 std::remove_reference
来获得你期望的结果。例如:
is_integral<remove_reference_t<T>>::value
template<typename> struct PrintTypeInErr;
- 然后尝试创建一个临时对象PrintTypeInErr<T>{};
- 编译器错误信息将包括真正的T
是什么,这样你就可以自行调试了。 - StoryTeller - Unslander Monica__PRETTY_FUNCTION__
(或在MSVC上使用__FUNCSIG__
)。这将打印模板参数类型,以及其他信息。 - HolyBlackCat