为什么对于 int* 类型的 decltype(*t),std::is_integral 返回 false?

3
#include<iostream>
using namespace std;
int main() {
  int* t;
  using T = decltype(*t);
  cout << is_integral<T>::value << endl;
  return 0;
}

为什么上面的代码会打印0?

1
这里有一个对你有用的小技巧。声明但不定义 template<typename> struct PrintTypeInErr; - 然后尝试创建一个临时对象 PrintTypeInErr<T>{}; - 编译器错误信息将包括真正的 T 是什么,这样你就可以自行调试了。 - StoryTeller - Unslander Monica
1
或者,创建一个模板函数来打印__PRETTY_FUNCTION__(或在MSVC上使用__FUNCSIG__)。这将打印模板参数类型,以及其他信息。 - HolyBlackCat
1个回答

4

*tlvalue 表达式,那么 decltype(*t) 会得到一个引用类型,即 int&

b) 如果表达式的值类别是 lvalue,则 decltype 返回 T&

你可以使用 std::remove_reference 来获得你期望的结果。例如:

is_integral<remove_reference_t<T>>::value

直播


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接