intrinsics.qbk
来自「Boost provides free peer-reviewed portab」· QBK 代码 · 共 73 行
QBK
73 行
[/ Copyright 2007 John Maddock. Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt).][section:intrinsics Support for Compiler Intrinsics]There are some traits that can not be implemented within the current C++ language:to make these traits "just work" with user defined types, some kind of additionalhelp from the compiler is required. Currently (April 2008) Visual C++ 8 and 9,GNU GCC 4.3 and MWCW 9provide the necessary intrinsics, and other compilers will no doubt follow in due course. The Following traits classes always need compiler support to do the right thing for all types (but all have safe fallback positions if this support is unavailable):* __is_union* __is_pod* __has_trivial_constructor* __has_trivial_copy* __has_trivial_assign* __has_trivial_destructor* __has_nothrow_constructor* __has_nothrow_copy* __has_nothrow_assign* __has_virtual_destructorThe following traits classes can't be portably implemented in the C++ language, although in practice, the implementations do in fact do the right thing on allthe compilers we know about:* __is_empty* __is_polymorphicThe following traits classes are dependent on one or more of the above:* __is_class* __is_statelessThe hooks for compiler-intrinsic support are defined in [@../../../../boost/type_traits/intrinsics.hpp boost/type_traits/intrinsics.hpp], adding support for new compilers is simplya matter of defining one of more of the following macros:[table Macros for Compiler Intrinsics [[BOOST_IS_UNION(T)][Should evaluate to true if T is a union type]] [[BOOST_IS_POD(T)][Should evaluate to true if T is a POD type]] [[BOOST_IS_EMPTY(T)][Should evaluate to true if T is an empty struct or union]] [[BOOST_HAS_TRIVIAL_CONSTRUCTOR(T)][Should evaluate to true if the default constructor for T is trivial (i.e. has no effect)]] [[BOOST_HAS_TRIVIAL_COPY(T)][Should evaluate to true if T has a trivial copy constructor (and can therefore be replaced by a call to memcpy)]] [[BOOST_HAS_TRIVIAL_ASSIGN(T)][Should evaluate to true if T has a trivial assignment operator (and can therefore be replaced by a call to memcpy)]] [[BOOST_HAS_TRIVIAL_DESTRUCTOR(T)][Should evaluate to true if T has a trivial destructor (i.e. ~T() has no effect)]] [[BOOST_HAS_NOTHROW_CONSTRUCTOR(T)][Should evaluate to true if `T x;` can not throw]] [[BOOST_HAS_NOTHROW_COPY(T)][Should evaluate to true if `T(t)` can not throw]] [[BOOST_HAS_NOTHROW_ASSIGN(T)][Should evaluate to true if `T t, u; t = u` can not throw]] [[BOOST_HAS_VIRTUAL_DESTRUCTOR(T)][Should evaluate to true T has a virtual destructor]] [[BOOST_IS_ABSTRACT(T)][Should evaluate to true if T is an abstract type]] [[BOOST_IS_BASE_OF(T,U)][Should evaluate to true if T is a base class of U]] [[BOOST_IS_CLASS(T)][Should evaluate to true if T is a class type]] [[BOOST_IS_CONVERTIBLE(T,U)][Should evaluate to true if T is convertible to U]] [[BOOST_IS_ENUM(T)][Should evaluate to true is T is an enum]] [[BOOST_IS_POLYMORPHIC(T)][Should evaluate to true if T is a polymorphic type]] [[BOOST_ALIGNMENT_OF(T)][Should evaluate to the alignment requirements of type T.]] ][endsect]
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?