Почему 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