我在<type_traits>头文件,但有些实现我找不到,比如:
// STRUCT TEMPLATE is_class
template <class _Ty>
struct is_class : bool_constant<__is_class(_Ty)> {}; // determine whether _Ty is a class
template <class _Ty>
_INLINE_VAR constexpr bool is_class_v = __is_class(_Ty);
我想知道__is_class的实现。有人知道实现在哪里吗?我使用名为visualstudio2019的IDE。
这些符号指的是保留的内置令牌,这些令牌由编译器本身识别和评估。编译器知道__is_class
的含义,对给定类型进行求值,然后使用求值结果。
碰巧的是,gcc在这里很好地记录了它的内置符号(这是针对gcc 10.2的,其他版本的gcc几乎有相同的页面(。编辑:这是VS的同一页——从外观上看,几乎是一样的。
在该页面上,您将偶然发现为gcc定义了__is_class
函数。其他编译器倾向于以相同的方式工作,可能只是符号本身的名称不同。
总之,在任何头文件中都找不到正式定义的__is_class
和其他内容。这些函数、类等被烘焙到编译器本身中。