Почему std::is_integral возвращает false для decltype(*t), где t равно int*?

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

Почему приведенный выше код печатает 0?

1 ответ

*tявляется lvalue выражением , тоdecltype(*t)приводит к ссылочному типу какint&.

б) если категория значения выражения lvalue, то decltype даетT&;

Вы можете использоватьstd::remove_referenceчтобы получить ожидаемый результат. Например

      is_integral<remove_reference_t<T>>::value

ЖИТЬ

Другие вопросы по тегам