C++中15种类型的分类是什么?

Tre*_*key 30 c++ types classification categories c++11

在Walter E. Brown 的CppCon2014会议演讲中,他表示该标准描述了C++中有15种类型的分类.

"C++类型的15个分区."
" 无效就是其中之一." - Walter E. Brown.

其他14个是什么?


在挖掘标准时,我发现了以下内容:

// 20.11.4.1
primary type categories:
template <class T> struct is_void;
template <class T> struct is_integral;
template <class T> struct is_floating_point;
template <class T> struct is_array;
template <class T> struct is_pointer;
template <class T> struct is_lvalue_reference;
template <class T> struct is_rvalue_reference;
template <class T> struct is_member_object_pointer;
template <class T> struct is_member_function_pointer;
template <class T> struct is_enum;
template <class T> struct is_union;
template <class T> struct is_class;
template <class T> struct is_function;

// 20.11.4.2 
composite type categories:
template <class T> struct is_reference;
template <class T> struct is_arithmetic;
template <class T> struct is_fundamental;
template <class T> struct is_object;
template <class T> struct is_scalar;
template <class T> struct is_compound;
template <class T> struct is_member_pointer;
Run Code Online (Sandbox Code Playgroud)

嗯,这超过15.这些都是类型特征无论如何.它们用于在编译时测试类型的某些属性.例如,integer类型将给出回到真正的is_integral,is_fundamental和是is_scalar.也许这15个是上面列出的一些,其余的是其他的子类别.


这是我尝试制作该语言的类型树的尝试:

在此输入图像描述

我猜:

 1.  void 
 2.  bool
 3.  char 
 4.  nullptr 
 5.  integral (signed) 
 6.  integral (unsigned) 
 7.  floating
 8.  enum 
 9.  array 
 10. class 
 11. union 
 12. lvalue reference 
 13. rvalue reference 
 14. member object pointer 
 15. member function pointer
Run Code Online (Sandbox Code Playgroud)

还要注意的是bool,char和enum都是不可或缺的类型,所以我真的不是在这个名单非常有信心.

Tre*_*key 27

我直接与沃尔特谈过,这只是一个错误的计算.

"唉,此后不久我意识到我错误计算了,因此在谈话期间犯了一个错误的错误:有14个(不是15个)类型分类.请参阅子句中的主要类型类别谓词列表[meta.unary C++标准中的.cat];它们对应于[basic.types]中为核心语言建立的分类." --Web

话虽这么说,他们是:

template <class T> struct is_void;
template <class T> struct is_null_pointer; //<- arrived in C++11 (std::nullptr_t)
template <class T> struct is_integral;
template <class T> struct is_floating_point;
template <class T> struct is_array;
template <class T> struct is_pointer;
template <class T> struct is_lvalue_reference;
template <class T> struct is_rvalue_reference;
template <class T> struct is_member_object_pointer;
template <class T> struct is_member_function_pointer;
template <class T> struct is_enum;
template <class T> struct is_union;
template <class T> struct is_class;
template <class T> struct is_function;
Run Code Online (Sandbox Code Playgroud)