Черты в [meta.unary.cat] предназначены для классификации каждого типа в одну категорию.Является ли это пустым, целочисленным, указателем и т. Д. На этом уровне указатель на функцию ничем не отличается от указателя на int.И обратите внимание, что указатель на член не является указателем.Это просто английский омоним.
Предполагалось, что каждый тип возвращает true только для одной черты в [meta.unary.cat].И в этой классификации и указатель функции, и указатель скаляра будут возвращать значение true при is_pointer
.
. Я отмечу, что мы не достигли нашей цели.nullptr_t
ускользает от нашей цели.Но мы подошли близко. Здесь - графическое представление текущей классификации type_traits.
Обновление:
Это правильно работающая программа с правильным выводом:
#include <iostream>
#include <type_traits>
typedef void (*fptr)();
typedef int* intptr;
int main()
{
std::cout << std::is_function<fptr>::value << '\n';
std::cout << std::is_pointer<fptr>::value << '\n';
std::cout << std::is_pointer<intptr>::value << '\n';
}
0
1
1