C++ type_traits里哪些東西通過標準語言沒有可能實現而必須尋求編譯器內建支持?
因為是想自己試著實現並理解一遍,而且盡量不依賴內建支持。我希望能有一份盡量短的內建依賴組件,利用標準語言和這些組件實現其他所有組件
https://msdn.microsoft.com/en-us/library/ms177194%28v=vs.140%29.aspx
翻了一下MSVC的&
// COMPILER SUPPORT MACROS
#define _IS_BASE_OF(_Base, _Der)
: _Cat_base&<__is_base_of(_Base, _Der)&>
#define _IS_CONVERTIBLE(_From, _To)
: _Cat_base&<__is_convertible_to(_From, _To)&>
#define _IS_UNION(_Ty)
: _Cat_base&<__is_union(_Ty)&>
#define _IS_CLASS(_Ty)
: _Cat_base&<__is_class(_Ty)&>
#define _IS_POD(_Ty)
: _Cat_base&<__is_pod(_Ty)&>
#define _IS_EMPTY(_Ty)
: _Cat_base&<__is_empty(_Ty)&>
#define _IS_POLYMORPHIC(_Ty)
: _Cat_base&<__is_polymorphic(_Ty)&>
#define _IS_ABSTRACT(_Ty)
: _Cat_base&<__is_abstract(_Ty)&>
#define _IS_STANDARD_LAYOUT(_Ty)
: _Cat_base&<__is_standard_layout(_Ty)&>
#define _IS_TRIVIAL(_Ty)
: _Cat_base&<__is_trivial(_Ty)&>
#define _HAS_TRIVIAL_DESTRUCTOR(_Ty)
: _Cat_base&<__has_trivial_destructor(_Ty)&>
#define _HAS_VIRTUAL_DESTRUCTOR(_Ty)
: _Cat_base&<__has_virtual_destructor(_Ty)&>
#define _UNDERLYING_TYPE(_Ty)
__underlying_type(_Ty)
#define _IS_LITERAL_TYPE(_Ty)
: _Cat_base&<__is_literal_type(_Ty)&>
#define _IS_ENUM(_Ty)
: _Cat_base&<__is_enum(_Ty)&>
#define _IS_DESTRUCTIBLE(_Ty)
: _Cat_base&<__is_destructible(_Ty)&>
#define _IS_NOTHROW_ASSIGNABLE(_To, _From)
: _Cat_base&<__is_nothrow_assignable(_To, _From)&>
#define _IS_NOTHROW_DESTRUCTIBLE(_Ty)
: _Cat_base&<__is_nothrow_destructible(_Ty)&>
#define _IS_TRIVIALLY_ASSIGNABLE(_To, _From)
: _Cat_base&<__is_trivially_assignable(_To, _From)&>
#define _IS_CONSTRUCTIBLE
__is_constructible
#define _IS_NOTHROW_CONSTRUCTIBLE
__is_nothrow_constructible
#define _IS_TRIVIALLY_CONSTRUCTIBLE
__is_trivially_constructible
對應的是:
is_base_of
is_convertible
is_union
is_class
is_pod
is_empty
is_polymorphic
is_abstract
is_standard_layout
is_trivial
has_trivial_destructor
has_virtual_destructor
underlying_type
is_literal_type
is_enum
is_destructible
is_nothrow_assignable
is_nothrow_destructible
is_trivially_assignable
is_constructible
is_nothrow_constructible
is_trivially_constructible
各種帶 trivial/trivially 的。
虛函數相關。枚舉相關。
空類、標準布局、聯合體與類區別。應該就這些了。不排除編譯器為了編譯更快,把某些能用模板實現的東西用內建擴展實現。翻了一下GCC的&
is_enum is_union is_class is_trivial is_standard_layout is_pod
is_literal_type is_empty is_polymorphic is_abstract has_trivial_destructor
has_trivial_constructor has_trivial_copy has_trivial_assign
has_virtual_destructor is_base_of underlying_type
這麼多。。
還是concept大法好
是gcc 的還是ms的呀?
推薦閱讀:
※看完 C++ 課本能否直接上手 Qt?
※C++IO標準庫 能否非入侵的修改<< >>操作符的行為?
※為什麼用C或C++表達Windows COM技術那麼複雜呢?是C或C++缺少什麼嗎~
※Qt編程可不可以結合其他的第三方庫和本土API?
※為什麼代碼中的comp函數只需返回0就可以表示兩串相同?