diff --git a/doc/add_const.qbk b/doc/add_const.qbk index ec8ed1d..c90cb9d 100644 --- a/doc/add_const.qbk +++ b/doc/add_const.qbk @@ -17,10 +17,6 @@ __type The same type as `T const` for all `T`. __std_ref 3.9.3. -__compat If the compiler does not support partial specialization of class-templates -then this template will compile, but the member `type` will always be the same as -type `T` except where __transform_workaround have been applied. - __header ` #include ` or ` #include ` [table Examples @@ -37,5 +33,7 @@ __header ` #include ` or ` #include ` or ` #include ` [table Examples @@ -37,5 +33,7 @@ __header ` #include ` or ` #include ` or ` #include ` [table Examples @@ -43,5 +39,7 @@ __header ` #include ` or ` #include ] +[all_compilers] + [endsect] diff --git a/doc/add_pointer.qbk b/doc/add_pointer.qbk index 55ea0aa..9c8dc77 100644 --- a/doc/add_pointer.qbk +++ b/doc/add_pointer.qbk @@ -16,15 +16,11 @@ __type The same type as `remove_reference::type*`. The rationale for this template -is that it produces the same type as `TYPEOF(&t)`, +is that it produces the same type as `decltype(&t)`, where `t` is an object of type `T`. __std_ref 8.3.1. -__compat If the compiler does not support partial specialization of class-templates -then this template will compile, but the member `type` will always be the same as -type `T` except where __transform_workaround have been applied. - __header ` #include ` or ` #include ` [table Examples @@ -41,5 +37,7 @@ __header ` #include ` or ` #include ` or ` #include ` [table Examples @@ -43,5 +39,7 @@ __header ` #include ` or ` #include ` or ` #include ` [table Examples @@ -46,5 +41,7 @@ __header ` #include ` or ` #include ] +__compat In the absence of rvalue-reference support this trait has no effect. + [endsect] diff --git a/doc/add_volatile.qbk b/doc/add_volatile.qbk index 1157088..206d7b5 100644 --- a/doc/add_volatile.qbk +++ b/doc/add_volatile.qbk @@ -17,10 +17,6 @@ __type The same type as `T volatile` for all `T`. __std_ref 3.9.3. -__compat If the compiler does not support partial specialization of class-templates -then this template will compile, but the member `type` will always be the same as -type `T` except where __transform_workaround have been applied. - __header ` #include ` or ` #include ` [table Examples @@ -37,5 +33,7 @@ __header ` #include ` or ` #include ` or ` #include ` or ` #include ::value_type` is the type `std::size_t`.] +[all_compilers] + [endsect] diff --git a/doc/floating_point_promotion.qbk b/doc/floating_point_promotion.qbk index bbbdc7a..ab3858c 100644 --- a/doc/floating_point_promotion.qbk +++ b/doc/floating_point_promotion.qbk @@ -33,5 +33,7 @@ __header ` #include ` or ` #incl ] +[all_compilers] + [endsect] diff --git a/doc/function_traits.qbk b/doc/function_traits.qbk index 1d2b364..54a2e0d 100644 --- a/doc/function_traits.qbk +++ b/doc/function_traits.qbk @@ -52,5 +52,7 @@ type use __remove_pointer.] ] +[all_compilers] + [endsect] diff --git a/doc/has_bit_and.qbk b/doc/has_bit_and.qbk index 4892125..bf91a7c 100644 --- a/doc/has_bit_and.qbk +++ b/doc/has_bit_and.qbk @@ -44,9 +44,7 @@ __examples [*See also:] [link boost_typetraits.category.value_traits.operators Operator Type Traits] -[*Limitation:] - -* Requires a compiler with working SFINAE. +[has_binary_operator_compat] [*Known issues:] diff --git a/doc/has_bit_and_assign.qbk b/doc/has_bit_and_assign.qbk index 382b345..200f8ae 100644 --- a/doc/has_bit_and_assign.qbk +++ b/doc/has_bit_and_assign.qbk @@ -28,6 +28,8 @@ If `Ret=void`, the return type is checked to be exactly `void`. __header `#include ` or `#include ` or `#include ` +[has_binary_operator_compat] + __examples [:`has_bit_and_assign::value_type` is the type `bool`.] @@ -44,10 +46,6 @@ __examples [*See also:] [link boost_typetraits.category.value_traits.operators Operator Type Traits] -[*Limitation:] - -* Requires a compiler with working SFINAE. - [*Known issues:] * This trait cannot detect whether binary `operator&=` is public or not: diff --git a/doc/has_bit_or.qbk b/doc/has_bit_or.qbk index 30bdaf8..4ec707d 100644 --- a/doc/has_bit_or.qbk +++ b/doc/has_bit_or.qbk @@ -28,6 +28,8 @@ If `Ret=void`, the return type is checked to be exactly `void`. __header `#include ` or `#include ` or `#include ` +[has_binary_operator_compat] + __examples [:`has_bit_or::value_type` is the type `bool`.] @@ -44,10 +46,6 @@ __examples [*See also:] [link boost_typetraits.category.value_traits.operators Operator Type Traits] -[*Limitation:] - -* Requires a compiler with working SFINAE. - [*Known issues:] * This trait cannot detect whether binary `operator|` is public or not: diff --git a/doc/has_bit_or_assign.qbk b/doc/has_bit_or_assign.qbk index 7eb37f2..9f07d47 100644 --- a/doc/has_bit_or_assign.qbk +++ b/doc/has_bit_or_assign.qbk @@ -28,6 +28,8 @@ If `Ret=void`, the return type is checked to be exactly `void`. __header `#include ` or `#include ` or `#include ` +[has_binary_operator_compat] + __examples [:`has_bit_or_assign::value_type` is the type `bool`.] @@ -44,10 +46,6 @@ __examples [*See also:] [link boost_typetraits.category.value_traits.operators Operator Type Traits] -[*Limitation:] - -* Requires a compiler with working SFINAE. - [*Known issues:] * This trait cannot detect whether binary `operator|=` is public or not: diff --git a/doc/has_bit_xor.qbk b/doc/has_bit_xor.qbk index 874cf42..8018beb 100644 --- a/doc/has_bit_xor.qbk +++ b/doc/has_bit_xor.qbk @@ -28,6 +28,8 @@ If `Ret=void`, the return type is checked to be exactly `void`. __header `#include ` or `#include ` or `#include ` +[has_binary_operator_compat] + __examples [:`has_bit_xor::value_type` is the type `bool`.] @@ -44,10 +46,6 @@ __examples [*See also:] [link boost_typetraits.category.value_traits.operators Operator Type Traits] -[*Limitation:] - -* Requires a compiler with working SFINAE. - [*Known issues:] * This trait cannot detect whether binary `operator^` is public or not: diff --git a/doc/has_bit_xor_assign.qbk b/doc/has_bit_xor_assign.qbk index 4e503ba..9791c27 100644 --- a/doc/has_bit_xor_assign.qbk +++ b/doc/has_bit_xor_assign.qbk @@ -28,6 +28,8 @@ If `Ret=void`, the return type is checked to be exactly `void`. __header `#include ` or `#include ` or `#include ` +[has_binary_operator_compat] + __examples [:`has_bit_xor_assign::value_type` is the type `bool`.] @@ -44,10 +46,6 @@ __examples [*See also:] [link boost_typetraits.category.value_traits.operators Operator Type Traits] -[*Limitation:] - -* Requires a compiler with working SFINAE. - [*Known issues:] * This trait cannot detect whether binary `operator^=` is public or not: diff --git a/doc/has_complement.qbk b/doc/has_complement.qbk index c02760b..f6b567b 100644 --- a/doc/has_complement.qbk +++ b/doc/has_complement.qbk @@ -27,6 +27,8 @@ If `Ret=void`, the return type is checked to be exactly `void`. __header `#include ` or `#include ` or `#include ` +[has_binary_operator_compat] + __examples [:`has_complement::value_type` is the type `bool`.] @@ -46,10 +48,6 @@ __examples [*See also:] [link boost_typetraits.category.value_traits.operators Operator Type Traits] -[*Limitation:] - -* Requires a compiler with working SFINAE. - [*Known issues:] * This trait cannot detect whether prefix `operator~` is public or not: diff --git a/doc/has_dereference.qbk b/doc/has_dereference.qbk index 5e729da..49b8fea 100644 --- a/doc/has_dereference.qbk +++ b/doc/has_dereference.qbk @@ -27,6 +27,8 @@ If `Ret=void`, the return type is checked to be exactly `void`. __header `#include ` or `#include ` or `#include ` +[has_binary_operator_compat] + __examples [:`has_dereference::value_type` is the type `bool`.] @@ -49,10 +51,6 @@ __examples [*See also:] [link boost_typetraits.category.value_traits.operators Operator Type Traits] -[*Limitation:] - -* Requires a compiler with working SFINAE. - [*Known issues:] * This trait cannot detect whether prefix `operator*` is public or not: diff --git a/doc/has_divides.qbk b/doc/has_divides.qbk index 8c614b0..9a758ec 100644 --- a/doc/has_divides.qbk +++ b/doc/has_divides.qbk @@ -28,6 +28,8 @@ If `Ret=void`, the return type is checked to be exactly `void`. __header `#include ` or `#include ` or `#include ` +[has_binary_operator_compat] + __examples [:`has_divides::value_type` is the type `bool`.] @@ -46,10 +48,6 @@ __examples [*See also:] [link boost_typetraits.category.value_traits.operators Operator Type Traits] -[*Limitation:] - -* Requires a compiler with working SFINAE. - [*Known issues:] * This trait cannot detect whether binary `operator/` is public or not: diff --git a/doc/has_divides_assign.qbk b/doc/has_divides_assign.qbk index 393da41..7968b8f 100644 --- a/doc/has_divides_assign.qbk +++ b/doc/has_divides_assign.qbk @@ -28,6 +28,8 @@ If `Ret=void`, the return type is checked to be exactly `void`. __header `#include ` or `#include ` or `#include ` +[has_binary_operator_compat] + __examples [:`has_divides_assign::value_type` is the type `bool`.] @@ -46,10 +48,6 @@ __examples [*See also:] [link boost_typetraits.category.value_traits.operators Operator Type Traits] -[*Limitation:] - -* Requires a compiler with working SFINAE. - [*Known issues:] * This trait cannot detect whether binary `operator/=` is public or not: diff --git a/doc/has_equal_to.qbk b/doc/has_equal_to.qbk index 78203d3..d33e790 100644 --- a/doc/has_equal_to.qbk +++ b/doc/has_equal_to.qbk @@ -28,6 +28,8 @@ If `Ret=void`, the return type is checked to be exactly `void`. __header `#include ` or `#include ` or `#include ` +[has_binary_operator_compat] + __examples [:`has_equal_to::value_type` is the type `bool`.] @@ -46,10 +48,6 @@ __examples [*See also:] [link boost_typetraits.category.value_traits.operators Operator Type Traits] -[*Limitation:] - -* Requires a compiler with working SFINAE. - [*Known issues:] * This trait cannot detect whether binary `operator==` is public or not: diff --git a/doc/has_greater.qbk b/doc/has_greater.qbk index b9be45f..d344420 100644 --- a/doc/has_greater.qbk +++ b/doc/has_greater.qbk @@ -28,6 +28,8 @@ If `Ret=void`, the return type is checked to be exactly `void`. __header `#include ` or `#include ` or `#include ` +[has_binary_operator_compat] + __examples [:`has_greater::value_type` is the type `bool`.] @@ -46,10 +48,6 @@ __examples [*See also:] [link boost_typetraits.category.value_traits.operators Operator Type Traits] -[*Limitation:] - -* Requires a compiler with working SFINAE. - [*Known issues:] * This trait cannot detect whether binary `operator>` is public or not: diff --git a/doc/has_greater_equal.qbk b/doc/has_greater_equal.qbk index 9ea1cae..bed5042 100644 --- a/doc/has_greater_equal.qbk +++ b/doc/has_greater_equal.qbk @@ -28,6 +28,8 @@ If `Ret=void`, the return type is checked to be exactly `void`. __header `#include ` or `#include ` or `#include ` +[has_binary_operator_compat] + __examples [:`has_greater_equal::value_type` is the type `bool`.] @@ -46,10 +48,6 @@ __examples [*See also:] [link boost_typetraits.category.value_traits.operators Operator Type Traits] -[*Limitation:] - -* Requires a compiler with working SFINAE. - [*Known issues:] * This trait cannot detect whether binary `operator>=` is public or not: diff --git a/doc/has_left_shift.qbk b/doc/has_left_shift.qbk index fa43945..b807a36 100644 --- a/doc/has_left_shift.qbk +++ b/doc/has_left_shift.qbk @@ -28,6 +28,8 @@ If `Ret=void`, the return type is checked to be exactly `void`. __header `#include ` or `#include ` or `#include ` +[has_binary_operator_compat] + __examples [:`has_left_shift::value_type` is the type `bool`.] @@ -47,10 +49,6 @@ __examples [*See also:] [link boost_typetraits.category.value_traits.operators Operator Type Traits] -[*Limitation:] - -* Requires a compiler with working SFINAE. - [*Known issues:] * This trait cannot detect whether binary `operator<<` is public or not: diff --git a/doc/has_left_shift_assign.qbk b/doc/has_left_shift_assign.qbk index 1981e91..fcfa92a 100644 --- a/doc/has_left_shift_assign.qbk +++ b/doc/has_left_shift_assign.qbk @@ -28,6 +28,8 @@ If `Ret=void`, the return type is checked to be exactly `void`. __header `#include ` or `#include ` or `#include ` +[has_binary_operator_compat] + __examples [:`has_left_shift_assign::value_type` is the type `bool`.] @@ -44,10 +46,6 @@ __examples [*See also:] [link boost_typetraits.category.value_traits.operators Operator Type Traits] -[*Limitation:] - -* Requires a compiler with working SFINAE. - [*Known issues:] * This trait cannot detect whether binary `operator<<=` is public or not: diff --git a/doc/has_less.qbk b/doc/has_less.qbk index 9dbf26d..daa81cb 100644 --- a/doc/has_less.qbk +++ b/doc/has_less.qbk @@ -28,6 +28,8 @@ If `Ret=void`, the return type is checked to be exactly `void`. __header `#include ` or `#include ` or `#include ` +[has_binary_operator_compat] + __examples [:`has_less::value_type` is the type `bool`.] @@ -46,10 +48,6 @@ __examples [*See also:] [link boost_typetraits.category.value_traits.operators Operator Type Traits] -[*Limitation:] - -* Requires a compiler with working SFINAE. - [*Known issues:] * This trait cannot detect whether binary `operator<` is public or not: diff --git a/doc/has_less_equal.qbk b/doc/has_less_equal.qbk index 832e888..6ee213e 100644 --- a/doc/has_less_equal.qbk +++ b/doc/has_less_equal.qbk @@ -28,6 +28,8 @@ If `Ret=void`, the return type is checked to be exactly `void`. __header `#include ` or `#include ` or `#include ` +[has_binary_operator_compat] + __examples [:`has_less_equal::value_type` is the type `bool`.] @@ -46,10 +48,6 @@ __examples [*See also:] [link boost_typetraits.category.value_traits.operators Operator Type Traits] -[*Limitation:] - -* Requires a compiler with working SFINAE. - [*Known issues:] * This trait cannot detect whether binary `operator<=` is public or not: diff --git a/doc/has_logical_and.qbk b/doc/has_logical_and.qbk index 1dfad18..62f2672 100644 --- a/doc/has_logical_and.qbk +++ b/doc/has_logical_and.qbk @@ -28,6 +28,8 @@ If `Ret=void`, the return type is checked to be exactly `void`. __header `#include ` or `#include ` or `#include ` +[has_binary_operator_compat] + __examples [:`has_logical_and::value_type` is the type `bool`.] @@ -45,10 +47,6 @@ __examples [*See also:] [link boost_typetraits.category.value_traits.operators Operator Type Traits] -[*Limitation:] - -* Requires a compiler with working SFINAE. - [*Known issues:] * This trait cannot detect whether binary `operator&&` is public or not: diff --git a/doc/has_logical_not.qbk b/doc/has_logical_not.qbk index 58fbf3a..2eec31c 100644 --- a/doc/has_logical_not.qbk +++ b/doc/has_logical_not.qbk @@ -27,6 +27,8 @@ If `Ret=void`, the return type is checked to be exactly `void`. __header `#include ` or `#include ` or `#include ` +[has_binary_operator_compat] + __examples [:`has_logical_not::value_type` is the type `bool`.] @@ -45,10 +47,6 @@ __examples [*See also:] [link boost_typetraits.category.value_traits.operators Operator Type Traits] -[*Limitation:] - -* Requires a compiler with working SFINAE. - [*Known issues:] * This trait cannot detect whether prefix `operator!` is public or not: diff --git a/doc/has_logical_or.qbk b/doc/has_logical_or.qbk index 29affa6..9bf2fd2 100644 --- a/doc/has_logical_or.qbk +++ b/doc/has_logical_or.qbk @@ -28,6 +28,8 @@ If `Ret=void`, the return type is checked to be exactly `void`. __header `#include ` or `#include ` or `#include ` +[has_binary_operator_compat] + __examples [:`has_logical_or::value_type` is the type `bool`.] @@ -45,10 +47,6 @@ __examples [*See also:] [link boost_typetraits.category.value_traits.operators Operator Type Traits] -[*Limitation:] - -* Requires a compiler with working SFINAE. - [*Known issues:] * This trait cannot detect whether binary `operator||` is public or not: diff --git a/doc/has_minus.qbk b/doc/has_minus.qbk index fdf4d9a..06141ce 100644 --- a/doc/has_minus.qbk +++ b/doc/has_minus.qbk @@ -28,6 +28,8 @@ If `Ret=void`, the return type is checked to be exactly `void`. __header `#include ` or `#include ` or `#include ` +[has_binary_operator_compat] + __examples [:`has_minus::value_type` is the type `bool`.] @@ -46,10 +48,6 @@ __examples [*See also:] [link boost_typetraits.category.value_traits.operators Operator Type Traits] -[*Limitation:] - -* Requires a compiler with working SFINAE. - [*Known issues:] * This trait cannot detect whether binary `operator-` is public or not: diff --git a/doc/has_minus_assign.qbk b/doc/has_minus_assign.qbk index cbb4cba..cb39468 100644 --- a/doc/has_minus_assign.qbk +++ b/doc/has_minus_assign.qbk @@ -28,6 +28,8 @@ If `Ret=void`, the return type is checked to be exactly `void`. __header `#include ` or `#include ` or `#include ` +[has_binary_operator_compat] + __examples [:`has_minus_assign::value_type` is the type `bool`.] @@ -46,10 +48,6 @@ __examples [*See also:] [link boost_typetraits.category.value_traits.operators Operator Type Traits] -[*Limitation:] - -* Requires a compiler with working SFINAE. - [*Known issues:] * This trait cannot detect whether binary `operator-=` is public or not: diff --git a/doc/has_modulus.qbk b/doc/has_modulus.qbk index 589f3b1..5f1384e 100644 --- a/doc/has_modulus.qbk +++ b/doc/has_modulus.qbk @@ -28,6 +28,8 @@ If `Ret=void`, the return type is checked to be exactly `void`. __header `#include ` or `#include ` or `#include ` +[has_binary_operator_compat] + __examples [:`has_modulus::value_type` is the type `bool`.] @@ -44,10 +46,6 @@ __examples [*See also:] [link boost_typetraits.category.value_traits.operators Operator Type Traits] -[*Limitation:] - -* Requires a compiler with working SFINAE. - [*Known issues:] * This trait cannot detect whether binary `operator%` is public or not: diff --git a/doc/has_modulus_assign.qbk b/doc/has_modulus_assign.qbk index 4441a70..636a250 100644 --- a/doc/has_modulus_assign.qbk +++ b/doc/has_modulus_assign.qbk @@ -28,6 +28,8 @@ If `Ret=void`, the return type is checked to be exactly `void`. __header `#include ` or `#include ` or `#include ` +[has_binary_operator_compat] + __examples [:`has_modulus_assign::value_type` is the type `bool`.] @@ -44,10 +46,6 @@ __examples [*See also:] [link boost_typetraits.category.value_traits.operators Operator Type Traits] -[*Limitation:] - -* Requires a compiler with working SFINAE. - [*Known issues:] * This trait cannot detect whether binary `operator%=` is public or not: diff --git a/doc/has_multiplies.qbk b/doc/has_multiplies.qbk index 9eaea40..fed1e65 100644 --- a/doc/has_multiplies.qbk +++ b/doc/has_multiplies.qbk @@ -28,6 +28,8 @@ If `Ret=void`, the return type is checked to be exactly `void`. __header `#include ` or `#include ` or `#include ` +[has_binary_operator_compat] + __examples [:`has_multiplies::value_type` is the type `bool`.] @@ -46,10 +48,6 @@ __examples [*See also:] [link boost_typetraits.category.value_traits.operators Operator Type Traits] -[*Limitation:] - -* Requires a compiler with working SFINAE. - [*Known issues:] * This trait cannot detect whether binary `operator*` is public or not: diff --git a/doc/has_multiplies_assign.qbk b/doc/has_multiplies_assign.qbk index 91b45e9..7bd67ad 100644 --- a/doc/has_multiplies_assign.qbk +++ b/doc/has_multiplies_assign.qbk @@ -28,6 +28,8 @@ If `Ret=void`, the return type is checked to be exactly `void`. __header `#include ` or `#include ` or `#include ` +[has_binary_operator_compat] + __examples [:`has_multiplies_assign::value_type` is the type `bool`.] @@ -46,10 +48,6 @@ __examples [*See also:] [link boost_typetraits.category.value_traits.operators Operator Type Traits] -[*Limitation:] - -* Requires a compiler with working SFINAE. - [*Known issues:] * This trait cannot detect whether binary `operator*=` is public or not: diff --git a/doc/has_negate.qbk b/doc/has_negate.qbk index 15ea477..e25c1d3 100644 --- a/doc/has_negate.qbk +++ b/doc/has_negate.qbk @@ -27,6 +27,8 @@ If `Ret=void`, the return type is checked to be exactly `void`. __header `#include ` or `#include ` or `#include ` +[has_binary_operator_compat] + __examples [:`has_negate::value_type` is the type `bool`.] @@ -45,10 +47,6 @@ __examples [*See also:] [link boost_typetraits.category.value_traits.operators Operator Type Traits] -[*Limitation:] - -* Requires a compiler with working SFINAE. - [*Known issues:] * This trait cannot detect whether prefix `operator-` is public or not: diff --git a/doc/has_new_operator.qbk b/doc/has_new_operator.qbk index 72e0d4c..a40c34e 100644 --- a/doc/has_new_operator.qbk +++ b/doc/has_new_operator.qbk @@ -12,9 +12,7 @@ __inherit If T is a (possibly cv-qualified) type with an overloaded new-operator then inherits from __true_type, otherwise inherits from __false_type. -__compat Not usable with compilers that do not support "substitution failure is not an error" -(in which case BOOST_NO_SFINAE will be defined), also known to be broken with -the Borland/Codegear compiler. +[has_binary_operator_compat] Also known to be broken with the Borland/Codegear compilers. __std_ref 12.5. diff --git a/doc/has_not_equal_to.qbk b/doc/has_not_equal_to.qbk index 36626c5..83a857e 100644 --- a/doc/has_not_equal_to.qbk +++ b/doc/has_not_equal_to.qbk @@ -28,6 +28,8 @@ If `Ret=void`, the return type is checked to be exactly `void`. __header `#include ` or `#include ` or `#include ` +[has_binary_operator_compat] + __examples [:`has_not_equal_to::value_type` is the type `bool`.] @@ -46,10 +48,6 @@ __examples [*See also:] [link boost_typetraits.category.value_traits.operators Operator Type Traits] -[*Limitation:] - -* Requires a compiler with working SFINAE. - [*Known issues:] * This trait cannot detect whether binary `operator!=` is public or not: diff --git a/doc/has_nothrow_assign.qbk b/doc/has_nothrow_assign.qbk index f71eb5c..c80a6d3 100644 --- a/doc/has_nothrow_assign.qbk +++ b/doc/has_nothrow_assign.qbk @@ -14,14 +14,11 @@ __inherit If T is a (possibly cv-qualified) type with a non-throwing assignment- then inherits from __true_type, otherwise inherits from __false_type. Type `T` must be a complete type. -__compat If the compiler does not support partial-specialization of class -templates, then this template can not be used with function types. - -Without some (as yet unspecified) help from the compiler, -`has_nothrow_assign` will never report that a class or struct has a -non-throwing assignment-operator; this is always safe, if possibly sub-optimal. -Currently (May 2005) only Visual C++ 8 has the necessary compiler support to ensure that this -trait "just works". +__compat Either requires C++11 `noexcept` and `decltype` or else some (unspecified) help from the compiler. +Currently (June 2015) compilers more recent than Visual C++ 8, GCC-4.3, Greenhills 6.0, +Intel-11.0, and Codegear and all recent GCC versions have the necessary compiler __intrinsics to ensure that this +trait "just works". You may test to see if the necessary support is available +by checking to see if `defined(BOOST_HAS_NOTHROW_CONSTRUCTOR) || (!defined(BOOST_NO_CXX11_DECLTYPE) && !defined(BOOST_NO_CXX11_NOEXCEPT))` is true. __header ` #include ` or ` #include ` diff --git a/doc/has_nothrow_constructor.qbk b/doc/has_nothrow_constructor.qbk index e8945cf..8295ad9 100644 --- a/doc/has_nothrow_constructor.qbk +++ b/doc/has_nothrow_constructor.qbk @@ -19,16 +19,11 @@ must be a complete type. These two traits are synonyms for each other. -__compat If the compiler does not support partial-specialization of class -templates, then this template can not be used with function types. - -Without some (unspecified) help from the compiler, -`has_nothrow_constructor` will never report that a class or struct has a -non-throwing default-constructor; this is always safe, if possibly sub-optimal. -Currently (May 2011) compilers more recent than Visual C++ 8, GCC-4.3, Greenhills 6.0, -Intel-11.0, and Codegear have the necessary compiler __intrinsics to ensure that this -trait "just works". You may also test to see if the necessary __intrinsics are available -by checking to see if the macro `BOOST_HAS_NOTHROW_CONSTRUCTOR` is defined. +__compat Either requires C++11 `noexcept` and `decltype` or else some (unspecified) help from the compiler. +Currently (June 2015) compilers more recent than Visual C++ 8, GCC-4.3, Greenhills 6.0, +Intel-11.0, and Codegear and all recent GCC versions have the necessary compiler __intrinsics to ensure that this +trait "just works". You may test to see if the necessary support is available +by checking to see if `defined(BOOST_HAS_NOTHROW_CONSTRUCTOR) || (!defined(BOOST_NO_CXX11_DECLTYPE) && !defined(BOOST_NO_CXX11_NOEXCEPT))` is true. __header ` #include ` or ` #include ` diff --git a/doc/has_plus.qbk b/doc/has_plus.qbk index 1dc790b..48f4281 100644 --- a/doc/has_plus.qbk +++ b/doc/has_plus.qbk @@ -28,6 +28,8 @@ If `Ret=void`, the return type is checked to be exactly `void`. __header `#include ` or `#include ` or `#include ` +[has_binary_operator_compat] + __examples [:`has_plus::value_type` is the type `bool`.] @@ -46,10 +48,6 @@ __examples [*See also:] [link boost_typetraits.category.value_traits.operators Operator Type Traits] -[*Limitation:] - -* Requires a compiler with working SFINAE. - [*Known issues:] * This trait cannot detect whether binary `operator+` is public or not: diff --git a/doc/has_plus_assign.qbk b/doc/has_plus_assign.qbk index be279e0..400ec43 100644 --- a/doc/has_plus_assign.qbk +++ b/doc/has_plus_assign.qbk @@ -28,6 +28,8 @@ If `Ret=void`, the return type is checked to be exactly `void`. __header `#include ` or `#include ` or `#include ` +[has_binary_operator_compat] + __examples [:`has_plus_assign::value_type` is the type `bool`.] @@ -46,10 +48,6 @@ __examples [*See also:] [link boost_typetraits.category.value_traits.operators Operator Type Traits] -[*Limitation:] - -* Requires a compiler with working SFINAE. - [*Known issues:] * This trait cannot detect whether binary `operator+=` is public or not: diff --git a/doc/has_post_decrement.qbk b/doc/has_post_decrement.qbk index a3e8780..2b76d3f 100644 --- a/doc/has_post_decrement.qbk +++ b/doc/has_post_decrement.qbk @@ -27,6 +27,8 @@ If `Ret=void`, the return type is checked to be exactly `void`. __header `#include ` or `#include ` or `#include ` +[has_binary_operator_compat] + __examples [:`has_post_decrement::value_type` is the type `bool`.] @@ -47,10 +49,6 @@ __examples [*See also:] [link boost_typetraits.category.value_traits.operators Operator Type Traits] -[*Limitation:] - -* Requires a compiler with working SFINAE. - [*Known issues:] * This trait cannot detect whether postfix `operator--` is public or not: diff --git a/doc/has_post_increment.qbk b/doc/has_post_increment.qbk index ddd93eb..06121ec 100644 --- a/doc/has_post_increment.qbk +++ b/doc/has_post_increment.qbk @@ -27,6 +27,8 @@ If `Ret=void`, the return type is checked to be exactly `void`. __header `#include ` or `#include ` or `#include ` +[has_binary_operator_compat] + __examples [:`has_post_increment::value_type` is the type `bool`.] @@ -47,10 +49,6 @@ __examples [*See also:] [link boost_typetraits.category.value_traits.operators Operator Type Traits] -[*Limitation:] - -* Requires a compiler with working SFINAE. - [*Known issues:] * This trait cannot detect whether postfix `operator++` is public or not: diff --git a/doc/has_pre_decrement.qbk b/doc/has_pre_decrement.qbk index 5393d71..b239388 100644 --- a/doc/has_pre_decrement.qbk +++ b/doc/has_pre_decrement.qbk @@ -27,6 +27,8 @@ If `Ret=void`, the return type is checked to be exactly `void`. __header `#include ` or `#include ` or `#include ` +[has_binary_operator_compat] + __examples [:`has_pre_decrement::value_type` is the type `bool`.] @@ -47,10 +49,6 @@ __examples [*See also:] [link boost_typetraits.category.value_traits.operators Operator Type Traits] -[*Limitation:] - -* Requires a compiler with working SFINAE. - [*Known issues:] * This trait cannot detect whether prefix `operator--` is public or not: diff --git a/doc/has_pre_increment.qbk b/doc/has_pre_increment.qbk index 74ef843..4008692 100644 --- a/doc/has_pre_increment.qbk +++ b/doc/has_pre_increment.qbk @@ -27,6 +27,8 @@ If `Ret=void`, the return type is checked to be exactly `void`. __header `#include ` or `#include ` or `#include ` +[has_binary_operator_compat] + __examples [:`has_pre_increment::value_type` is the type `bool`.] @@ -47,10 +49,6 @@ __examples [*See also:] [link boost_typetraits.category.value_traits.operators Operator Type Traits] -[*Limitation:] - -* Requires a compiler with working SFINAE. - [*Known issues:] * This trait cannot detect whether prefix `operator++` is public or not: diff --git a/doc/has_right_shift.qbk b/doc/has_right_shift.qbk index 7c342ff..dee8852 100644 --- a/doc/has_right_shift.qbk +++ b/doc/has_right_shift.qbk @@ -28,6 +28,8 @@ If `Ret=void`, the return type is checked to be exactly `void`. __header `#include ` or `#include ` or `#include ` +[has_binary_operator_compat] + __examples [:`has_right_shift::value_type` is the type `bool`.] @@ -47,10 +49,6 @@ __examples [*See also:] [link boost_typetraits.category.value_traits.operators Operator Type Traits] -[*Limitation:] - -* Requires a compiler with working SFINAE. - [*Known issues:] * This trait cannot detect whether binary `operator>>` is public or not: diff --git a/doc/has_right_shift_assign.qbk b/doc/has_right_shift_assign.qbk index 4538d20..d45dea5 100644 --- a/doc/has_right_shift_assign.qbk +++ b/doc/has_right_shift_assign.qbk @@ -28,6 +28,8 @@ If `Ret=void`, the return type is checked to be exactly `void`. __header `#include ` or `#include ` or `#include ` +[has_binary_operator_compat] + __examples [:`has_right_shift_assign::value_type` is the type `bool`.] @@ -44,10 +46,6 @@ __examples [*See also:] [link boost_typetraits.category.value_traits.operators Operator Type Traits] -[*Limitation:] - -* Requires a compiler with working SFINAE. - [*Known issues:] * This trait cannot detect whether binary `operator>>=` is public or not: diff --git a/doc/has_unary_minus.qbk b/doc/has_unary_minus.qbk index 4758ba3..9ba7988 100644 --- a/doc/has_unary_minus.qbk +++ b/doc/has_unary_minus.qbk @@ -27,6 +27,8 @@ If `Ret=void`, the return type is checked to be exactly `void`. __header `#include ` or `#include ` or `#include ` +[has_binary_operator_compat] + __examples [:`has_unary_minus::value_type` is the type `bool`.] @@ -45,10 +47,6 @@ __examples [*See also:] [link boost_typetraits.category.value_traits.operators Operator Type Traits] -[*Limitation:] - -* Requires a compiler with working SFINAE. - [*Known issues:] * This trait cannot detect whether prefix `operator-` is public or not: diff --git a/doc/has_unary_plus.qbk b/doc/has_unary_plus.qbk index 43540ec..6540164 100644 --- a/doc/has_unary_plus.qbk +++ b/doc/has_unary_plus.qbk @@ -27,6 +27,8 @@ If `Ret=void`, the return type is checked to be exactly `void`. __header `#include ` or `#include ` or `#include ` +[has_binary_operator_compat] + __examples [:`has_unary_plus::value_type` is the type `bool`.] @@ -45,10 +47,6 @@ __examples [*See also:] [link boost_typetraits.category.value_traits.operators Operator Type Traits] -[*Limitation:] - -* Requires a compiler with working SFINAE. - [*Known issues:] * This trait cannot detect whether prefix `operator+` is public or not: diff --git a/doc/html/boost_typetraits/category/transform.html b/doc/html/boost_typetraits/category/transform.html index 7289cf1..5ebf62c 100644 --- a/doc/html/boost_typetraits/category/transform.html +++ b/doc/html/boost_typetraits/category/transform.html @@ -102,62 +102,6 @@ template <class T> struct remove_volatile; -
- - Broken - Compiler Workarounds: -
-

- For all of these templates support for partial specialization of class templates - is required to correctly implement the transformation. On the other hand, - practice shows that many of the templates from this category are very useful, - and often essential for implementing some generic libraries. Lack of these - templates is often one of the major limiting factors in porting those libraries - to compilers that do not yet support this language feature. As some of these - compilers are going to be around for a while, and at least one of them is - very wide-spread, it was decided that the library should provide workarounds - where possible. -

-

- The basic idea behind the workaround is to manually define full specializations - of all type transformation templates for all fundamental types, and all their - 1st and 2nd rank cv-[un]qualified derivative pointer types, and to provide - a user-level macro that will define all the explicit specializations needed - for any user-defined type T. -

-

- The first part guarantees the successful compilation of something like this: -

-
BOOST_STATIC_ASSERT((is_same<char, remove_reference<char&>::type>::value));
-BOOST_STATIC_ASSERT((is_same<char const, remove_reference<char const&>::type>::value));
-BOOST_STATIC_ASSERT((is_same<char volatile, remove_reference<char volatile&>::type>::value));
-BOOST_STATIC_ASSERT((is_same<char const volatile, remove_reference<char const volatile&>::type>::value));
-BOOST_STATIC_ASSERT((is_same<char*, remove_reference<char*&>::type>::value));
-BOOST_STATIC_ASSERT((is_same<char const*, remove_reference<char const*&>::type>::value));
-...
-BOOST_STATIC_ASSERT((is_same<char const volatile* const volatile* const volatile, remove_reference<char const volatile* const volatile* const volatile&>::type>::value));
-
-

- and the second part provides the library's users with a mechanism to make - the above code work not only for char, - int or other built-in type, - but for their own types as well: -

-
namespace myspace{
-   struct MyClass {};
-}
-// declare this at global scope:
-BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(myspace::MyClass)
-// transformations on myspace::MyClass now work:
-BOOST_STATIC_ASSERT((is_same<myspace::MyClass, remove_reference<myspace::MyClass&>::type>::value));
-BOOST_STATIC_ASSERT((is_same<myspace::MyClass, remove_const<myspace::MyClass const>::type>::value));
-// etc.
-
-

- Note that the macro BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION evaluates - to nothing on those compilers that do support - partial specialization. -

diff --git a/doc/html/boost_typetraits/intrinsics.html b/doc/html/boost_typetraits/intrinsics.html index e162f23..b291783 100644 --- a/doc/html/boost_typetraits/intrinsics.html +++ b/doc/html/boost_typetraits/intrinsics.html @@ -47,6 +47,12 @@
  • is_pod
  • +
  • + is_nothrow_move_assignable +
  • +
  • + is_nothrow_move_constructible +
  • has_trivial_constructor
  • @@ -90,6 +96,9 @@
  • is_polymorphic
  • +
  • + is_virtual_base_of +
  • The following traits classes are dependent on one or more of the above: @@ -117,197 +126,17 @@

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/html/boost_typetraits/mpl.html b/doc/html/boost_typetraits/mpl.html index 94711cf..a5764fa 100644 --- a/doc/html/boost_typetraits/mpl.html +++ b/doc/html/boost_typetraits/mpl.html @@ -29,18 +29,15 @@

    All the value based traits in this library conform to MPL's requirements for an Integral - Constant type: that includes a number of rather intrusive workarounds - for broken compilers. + Constant type.

    - Purely as an implementation detail, this means that true_type - inherits from boost::mpl::true_, - false_type - inherits from boost::mpl::false_, - and integral_constant<T, - v> - inherits from boost::mpl::integral_c<T,v> - (provided T is not bool) + Please note that these types no longer inherit from mpl::true_ or + mpl::false_ etc, and the library will no longer + implicitly include any MPL header. However there is an implicit conversion + from integral_constant to the + corresponding MPL types, therefore tag-dispatching that uses MPL types in function + overloads will still work as before.

    - BOOST_IS_UNION(T) + BOOST_ALIGNMENT_OF(T)

    - Should evaluate to true if T is a union type + Should evaluate to the alignment requirements of type T

    -

    - 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_MOVE_CONSTRUCTOR(T) -

    -
    -

    - Should evaluate to true if T has a trivial move 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_MOVE_ASSIGN(T) -

    -
    -

    - Should evaluate to true if T has a trivial move 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_NOTHROW_MOVE_ASSIGN(T) -

    -
    -

    - Should evaluate to true T has a non-throwing move assign operator. -

    -
    -

    - BOOST_IS_NOTHROW_MOVE_CONSTRUCT(T) -

    -
    -

    - Should evaluate to true T has a non-throwing move constructor. -

    -

    BOOST_IS_ABSTRACT(T) @@ -356,6 +185,18 @@

    +

    + BOOST_IS_EMPTY(T) +

    +
    +

    + Should evaluate to true if T is an empty struct or union +

    +

    BOOST_IS_ENUM(T) @@ -368,6 +209,43 @@

    +

    + BOOST_IS_FINAL(T) +

    +
    +

    + Should evaluate to true if T is a class type declared with the final + specifier +

    +
    +

    + BOOST_IS_NOTHROW_MOVE_ASSIGN(T) +

    +
    +

    + Should evaluate to true T has a non-throwing move assign operator. +

    +
    +

    + BOOST_IS_NOTHROW_MOVE_CONSTRUCT(T) +

    +
    +

    + Should evaluate to true T has a non-throwing move constructor. +

    +

    BOOST_IS_POLYMORPHIC(T) @@ -382,25 +260,156 @@

    - BOOST_ALIGNMENT_OF(T) + BOOST_IS_POD(T)

    - Should evaluate to the alignment requirements of type T + Should evaluate to true if T is a POD type

    - BOOST_IS_FINAL(T) + BOOST_IS_UNION(T)

    - Should evaluate to true if T is a class type declared with the final - specifier + Should evaluate to true if T is a union type +

    +
    +

    + BOOST_HAS_NOTHROW_ASSIGN(T) +

    +
    +

    + Should evaluate to true if T + t, + u; + t = + u can not throw +

    +
    +

    + 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_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_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_DESTRUCTOR(T) +

    +
    +

    + Should evaluate to true if T has a trivial destructor (i.e. ~T() + has no effect) +

    +
    +

    + BOOST_HAS_TRIVIAL_MOVE_CONSTRUCTOR(T) +

    +
    +

    + Should evaluate to true if T has a trivial move constructor (and + can therefore be replaced by a call to memcpy) +

    +
    +

    + BOOST_HAS_TRIVIAL_MOVE_ASSIGN(T) +

    +
    +

    + Should evaluate to true if T has a trivial move assignment operator + (and can therefore be replaced by a call to memcpy) +

    +
    +

    + BOOST_HAS_VIRTUAL_DESTRUCTOR(T) +

    +
    +

    + Should evaluate to true T has a virtual destructor

    diff --git a/doc/html/boost_typetraits/reference/add_const.html b/doc/html/boost_typetraits/reference/add_const.html index fc8e3a6..9f84ce4 100644 --- a/doc/html/boost_typetraits/reference/add_const.html +++ b/doc/html/boost_typetraits/reference/add_const.html @@ -39,14 +39,6 @@

    C++ Standard Reference: 3.9.3.

    -

    - Compiler Compatibility: If the compiler - does not support partial specialization of class-templates then this template - will compile, but the member type - will always be the same as type T - except where compiler - workarounds have been applied. -

    Header: #include <boost/type_traits/add_const.hpp> @@ -124,7 +116,10 @@

    -
    +

    + Compiler Compatibility: All current compilers + are supported by this trait. +

    diff --git a/doc/html/boost_typetraits/reference/add_cv.html b/doc/html/boost_typetraits/reference/add_cv.html index c947aae..2c6ef38 100644 --- a/doc/html/boost_typetraits/reference/add_cv.html +++ b/doc/html/boost_typetraits/reference/add_cv.html @@ -40,14 +40,6 @@

    C++ Standard Reference: 3.9.3.

    -

    - Compiler Compatibility: If the compiler - does not support partial specialization of class-templates then this template - will compile, but the member type - will always be the same as type T - except where compiler - workarounds have been applied. -

    Header: #include <boost/type_traits/add_cv.hpp> @@ -127,7 +119,10 @@

    -
    +

    + Compiler Compatibility: All current compilers + are supported by this trait. +

    diff --git a/doc/html/boost_typetraits/reference/add_lvalue_reference.html b/doc/html/boost_typetraits/reference/add_lvalue_reference.html index f8abfdb..0665fdc 100644 --- a/doc/html/boost_typetraits/reference/add_lvalue_reference.html +++ b/doc/html/boost_typetraits/reference/add_lvalue_reference.html @@ -44,14 +44,6 @@

    C++ Standard Reference: 20.7.6.2.

    -

    - Compiler Compatibility: If the compiler - does not support partial specialization of class-templates then this template - will compile, but the member type - will always be the same as type T - except where compiler - workarounds have been applied. -

    Header: #include <boost/type_traits/add_lvalue_reference.hpp> @@ -153,7 +145,10 @@

    -
    +

    + Compiler Compatibility: All current compilers + are supported by this trait. +

    diff --git a/doc/html/boost_typetraits/reference/add_pointer.html b/doc/html/boost_typetraits/reference/add_pointer.html index ab4873d..a775a5e 100644 --- a/doc/html/boost_typetraits/reference/add_pointer.html +++ b/doc/html/boost_typetraits/reference/add_pointer.html @@ -36,20 +36,12 @@ type: The same type as remove_reference<T>::type*.

    - The rationale for this template is that it produces the same type as TYPEOF(&t), where + The rationale for this template is that it produces the same type as decltype(&t), where t is an object of type T.

    C++ Standard Reference: 8.3.1.

    -

    - Compiler Compatibility: If the compiler - does not support partial specialization of class-templates then this template - will compile, but the member type - will always be the same as type T - except where compiler - workarounds have been applied. -

    Header: #include <boost/type_traits/add_pointer.hpp> @@ -126,7 +118,10 @@

    -
    +

    + Compiler Compatibility: All current compilers + are supported by this trait. +

    diff --git a/doc/html/boost_typetraits/reference/add_reference.html b/doc/html/boost_typetraits/reference/add_reference.html index ffc578f..7023d53 100644 --- a/doc/html/boost_typetraits/reference/add_reference.html +++ b/doc/html/boost_typetraits/reference/add_reference.html @@ -51,14 +51,6 @@

    C++ Standard Reference: 8.3.2.

    -

    - Compiler Compatibility: If the compiler - does not support partial specialization of class-templates then this template - will compile, but the member type - will always be the same as type T - except where compiler - workarounds have been applied. -

    Header: #include <boost/type_traits/add_reference.hpp> @@ -135,7 +127,10 @@

    -
    +

    + Compiler Compatibility: All current compilers + are supported by this trait. +

    diff --git a/doc/html/boost_typetraits/reference/add_rvalue_reference.html b/doc/html/boost_typetraits/reference/add_rvalue_reference.html index 333048a..2f148a9 100644 --- a/doc/html/boost_typetraits/reference/add_rvalue_reference.html +++ b/doc/html/boost_typetraits/reference/add_rvalue_reference.html @@ -44,12 +44,6 @@

    C++ Standard Reference: 20.7.6.2.

    -

    - Compiler Compatibility: If the compiler - does not support partial specialization of class-templates and rvalue references - then this template will compile, but the member type - will always be the same as type T. -

    Header: #include <boost/type_traits/add_rvalue_reference.hpp> @@ -151,7 +145,10 @@

    -
    +

    + Compiler Compatibility: In the absence of + rvalue-reference support this trait has no effect. +

    diff --git a/doc/html/boost_typetraits/reference/add_volatile.html b/doc/html/boost_typetraits/reference/add_volatile.html index 311fcec..d935768 100644 --- a/doc/html/boost_typetraits/reference/add_volatile.html +++ b/doc/html/boost_typetraits/reference/add_volatile.html @@ -39,14 +39,6 @@

    C++ Standard Reference: 3.9.3.

    -

    - Compiler Compatibility: If the compiler - does not support partial specialization of class-templates then this template - will compile, but the member type - will always be the same as type T - except where compiler - workarounds have been applied. -

    Header: #include <boost/type_traits/add_volatile.hpp> @@ -125,7 +117,10 @@

    -
    +

    + Compiler Compatibility: All current compilers + are supported by this trait. +

    diff --git a/doc/html/boost_typetraits/reference/conditional.html b/doc/html/boost_typetraits/reference/conditional.html index 23fe129..7c7577c 100644 --- a/doc/html/boost_typetraits/reference/conditional.html +++ b/doc/html/boost_typetraits/reference/conditional.html @@ -39,9 +39,6 @@ If B is true, the member typedef type shall equal T. If B is false, the member typedef type shall equal U.

    -

    - This trait is really just an alias for boost::mpl::if_c. -

    diff --git a/doc/html/boost_typetraits/reference/decay.html b/doc/html/boost_typetraits/reference/decay.html index 0ce026f..4e77ade 100644 --- a/doc/html/boost_typetraits/reference/decay.html +++ b/doc/html/boost_typetraits/reference/decay.html @@ -130,7 +130,10 @@
    -
    +

    + Compiler Compatibility: All current compilers + are supported by this trait. +

    diff --git a/doc/html/boost_typetraits/reference/extent.html b/doc/html/boost_typetraits/reference/extent.html index cfdb833..1204e3f 100644 --- a/doc/html/boost_typetraits/reference/extent.html +++ b/doc/html/boost_typetraits/reference/extent.html @@ -88,6 +88,10 @@

    extent<T>::value_type is the type std::size_t.

    +

    + Compiler Compatibility: All current compilers + are supported by this trait. +

    diff --git a/doc/html/boost_typetraits/reference/floating_point_promotion.html b/doc/html/boost_typetraits/reference/floating_point_promotion.html index 1700088..257dab9 100644 --- a/doc/html/boost_typetraits/reference/floating_point_promotion.html +++ b/doc/html/boost_typetraits/reference/floating_point_promotion.html @@ -107,7 +107,10 @@
    -
    +

    + Compiler Compatibility: All current compilers + are supported by this trait. +

    diff --git a/doc/html/boost_typetraits/reference/function_traits.html b/doc/html/boost_typetraits/reference/function_traits.html index 922f3bc..68084ac 100644 --- a/doc/html/boost_typetraits/reference/function_traits.html +++ b/doc/html/boost_typetraits/reference/function_traits.html @@ -263,7 +263,10 @@
    -
    +

    + Compiler Compatibility: All current compilers + are supported by this trait. +

    diff --git a/doc/html/boost_typetraits/reference/has_bit_and.html b/doc/html/boost_typetraits/reference/has_bit_and.html index cb3011d..d6ba60e 100644 --- a/doc/html/boost_typetraits/reference/has_bit_and.html +++ b/doc/html/boost_typetraits/reference/has_bit_and.html @@ -100,11 +100,10 @@ Type Traits

    - Limitation: + Compiler Compatibility: Requires working + SFINAE (i.e. BOOST_NO_SFINAE is not set). Only a minority of rather old compilers + do not support this.

    -
    • - Requires a compiler with working SFINAE. -

    Known issues:

    diff --git a/doc/html/boost_typetraits/reference/has_bit_and_assign.html b/doc/html/boost_typetraits/reference/has_bit_and_assign.html index d98b0aa..d913cb5 100644 --- a/doc/html/boost_typetraits/reference/has_bit_and_assign.html +++ b/doc/html/boost_typetraits/reference/has_bit_and_assign.html @@ -62,6 +62,11 @@ or #include <boost/type_traits/has_operator.hpp> or #include <boost/type_traits.hpp>

    +

    + Compiler Compatibility: Requires working + SFINAE (i.e. BOOST_NO_SFINAE is not set). Only a minority of rather old compilers + do not support this. +

    Examples:

    @@ -99,12 +104,6 @@ See also:Operator Type Traits

    -

    - Limitation: -

    -
    • - Requires a compiler with working SFINAE. -

    Known issues:

    diff --git a/doc/html/boost_typetraits/reference/has_bit_or.html b/doc/html/boost_typetraits/reference/has_bit_or.html index 89b4a14..89cd8dc 100644 --- a/doc/html/boost_typetraits/reference/has_bit_or.html +++ b/doc/html/boost_typetraits/reference/has_bit_or.html @@ -62,6 +62,11 @@ or #include <boost/type_traits/has_operator.hpp> or #include <boost/type_traits.hpp>

    +

    + Compiler Compatibility: Requires working + SFINAE (i.e. BOOST_NO_SFINAE is not set). Only a minority of rather old compilers + do not support this. +

    Examples:

    @@ -99,12 +104,6 @@ See also:Operator Type Traits

    -

    - Limitation: -

    -
    • - Requires a compiler with working SFINAE. -

    Known issues:

    diff --git a/doc/html/boost_typetraits/reference/has_bit_or_assign.html b/doc/html/boost_typetraits/reference/has_bit_or_assign.html index 5db7c95..4f93a5e 100644 --- a/doc/html/boost_typetraits/reference/has_bit_or_assign.html +++ b/doc/html/boost_typetraits/reference/has_bit_or_assign.html @@ -62,6 +62,11 @@ or #include <boost/type_traits/has_operator.hpp> or #include <boost/type_traits.hpp>

    +

    + Compiler Compatibility: Requires working + SFINAE (i.e. BOOST_NO_SFINAE is not set). Only a minority of rather old compilers + do not support this. +

    Examples:

    @@ -99,12 +104,6 @@ See also:Operator Type Traits

    -

    - Limitation: -

    -
    • - Requires a compiler with working SFINAE. -

    Known issues:

    diff --git a/doc/html/boost_typetraits/reference/has_bit_xor.html b/doc/html/boost_typetraits/reference/has_bit_xor.html index e579c91..80463de 100644 --- a/doc/html/boost_typetraits/reference/has_bit_xor.html +++ b/doc/html/boost_typetraits/reference/has_bit_xor.html @@ -62,6 +62,11 @@ or #include <boost/type_traits/has_operator.hpp> or #include <boost/type_traits.hpp>

    +

    + Compiler Compatibility: Requires working + SFINAE (i.e. BOOST_NO_SFINAE is not set). Only a minority of rather old compilers + do not support this. +

    Examples:

    @@ -99,12 +104,6 @@ See also:Operator Type Traits

    -

    - Limitation: -

    -
    • - Requires a compiler with working SFINAE. -

    Known issues:

    diff --git a/doc/html/boost_typetraits/reference/has_bit_xor_assign.html b/doc/html/boost_typetraits/reference/has_bit_xor_assign.html index 1a7c302..a6fe0b3 100644 --- a/doc/html/boost_typetraits/reference/has_bit_xor_assign.html +++ b/doc/html/boost_typetraits/reference/has_bit_xor_assign.html @@ -62,6 +62,11 @@ or #include <boost/type_traits/has_operator.hpp> or #include <boost/type_traits.hpp>

    +

    + Compiler Compatibility: Requires working + SFINAE (i.e. BOOST_NO_SFINAE is not set). Only a minority of rather old compilers + do not support this. +

    Examples:

    @@ -99,12 +104,6 @@ See also:Operator Type Traits

    -

    - Limitation: -

    -
    • - Requires a compiler with working SFINAE. -

    Known issues:

    diff --git a/doc/html/boost_typetraits/reference/has_complement.html b/doc/html/boost_typetraits/reference/has_complement.html index 40b12ee..07c6a32 100644 --- a/doc/html/boost_typetraits/reference/has_complement.html +++ b/doc/html/boost_typetraits/reference/has_complement.html @@ -62,6 +62,11 @@ or #include <boost/type_traits/has_operator.hpp> or #include <boost/type_traits.hpp>

    +

    + Compiler Compatibility: Requires working + SFINAE (i.e. BOOST_NO_SFINAE is not set). Only a minority of rather old compilers + do not support this. +

    Examples:

    @@ -108,12 +113,6 @@ See also:Operator Type Traits

    -

    - Limitation: -

    -
    • - Requires a compiler with working SFINAE. -

    Known issues:

    diff --git a/doc/html/boost_typetraits/reference/has_dereference.html b/doc/html/boost_typetraits/reference/has_dereference.html index 463f70d..3e63bbe 100644 --- a/doc/html/boost_typetraits/reference/has_dereference.html +++ b/doc/html/boost_typetraits/reference/has_dereference.html @@ -62,6 +62,11 @@ or #include <boost/type_traits/has_operator.hpp> or #include <boost/type_traits.hpp>

    +

    + Compiler Compatibility: Requires working + SFINAE (i.e. BOOST_NO_SFINAE is not set). Only a minority of rather old compilers + do not support this. +

    Examples:

    @@ -117,12 +122,6 @@ See also:Operator Type Traits

    -

    - Limitation: -

    -
    • - Requires a compiler with working SFINAE. -

    Known issues:

    diff --git a/doc/html/boost_typetraits/reference/has_divides.html b/doc/html/boost_typetraits/reference/has_divides.html index a8efda9..4b7b851 100644 --- a/doc/html/boost_typetraits/reference/has_divides.html +++ b/doc/html/boost_typetraits/reference/has_divides.html @@ -62,6 +62,11 @@ or #include <boost/type_traits/has_operator.hpp> or #include <boost/type_traits.hpp>

    +

    + Compiler Compatibility: Requires working + SFINAE (i.e. BOOST_NO_SFINAE is not set). Only a minority of rather old compilers + do not support this. +

    Examples:

    @@ -105,12 +110,6 @@ See also:Operator Type Traits

    -

    - Limitation: -

    -
    • - Requires a compiler with working SFINAE. -

    Known issues:

    diff --git a/doc/html/boost_typetraits/reference/has_divides_assign.html b/doc/html/boost_typetraits/reference/has_divides_assign.html index 0edd343..b843a3f 100644 --- a/doc/html/boost_typetraits/reference/has_divides_assign.html +++ b/doc/html/boost_typetraits/reference/has_divides_assign.html @@ -62,6 +62,11 @@ or #include <boost/type_traits/has_operator.hpp> or #include <boost/type_traits.hpp>

    +

    + Compiler Compatibility: Requires working + SFINAE (i.e. BOOST_NO_SFINAE is not set). Only a minority of rather old compilers + do not support this. +

    Examples:

    @@ -105,12 +110,6 @@ See also:Operator Type Traits

    -

    - Limitation: -

    -
    • - Requires a compiler with working SFINAE. -

    Known issues:

    diff --git a/doc/html/boost_typetraits/reference/has_equal_to.html b/doc/html/boost_typetraits/reference/has_equal_to.html index 4583278..5afe3de 100644 --- a/doc/html/boost_typetraits/reference/has_equal_to.html +++ b/doc/html/boost_typetraits/reference/has_equal_to.html @@ -62,6 +62,11 @@ or #include <boost/type_traits/has_operator.hpp> or #include <boost/type_traits.hpp>

    +

    + Compiler Compatibility: Requires working + SFINAE (i.e. BOOST_NO_SFINAE is not set). Only a minority of rather old compilers + do not support this. +

    Examples:

    @@ -104,12 +109,6 @@ See also:Operator Type Traits

    -

    - Limitation: -

    -
    • - Requires a compiler with working SFINAE. -

    Known issues:

    diff --git a/doc/html/boost_typetraits/reference/has_greater.html b/doc/html/boost_typetraits/reference/has_greater.html index 46c9f4d..ac426f6 100644 --- a/doc/html/boost_typetraits/reference/has_greater.html +++ b/doc/html/boost_typetraits/reference/has_greater.html @@ -62,6 +62,11 @@ or #include <boost/type_traits/has_operator.hpp> or #include <boost/type_traits.hpp>

    +

    + Compiler Compatibility: Requires working + SFINAE (i.e. BOOST_NO_SFINAE is not set). Only a minority of rather old compilers + do not support this. +

    Examples:

    @@ -104,12 +109,6 @@ See also:Operator Type Traits

    -

    - Limitation: -

    -
    • - Requires a compiler with working SFINAE. -

    Known issues:

    diff --git a/doc/html/boost_typetraits/reference/has_greater_equal.html b/doc/html/boost_typetraits/reference/has_greater_equal.html index 2413bfd..1a1621a 100644 --- a/doc/html/boost_typetraits/reference/has_greater_equal.html +++ b/doc/html/boost_typetraits/reference/has_greater_equal.html @@ -62,6 +62,11 @@ or #include <boost/type_traits/has_operator.hpp> or #include <boost/type_traits.hpp>

    +

    + Compiler Compatibility: Requires working + SFINAE (i.e. BOOST_NO_SFINAE is not set). Only a minority of rather old compilers + do not support this. +

    Examples:

    @@ -104,12 +109,6 @@ See also:Operator Type Traits

    -

    - Limitation: -

    -
    • - Requires a compiler with working SFINAE. -

    Known issues:

    diff --git a/doc/html/boost_typetraits/reference/has_left_shift.html b/doc/html/boost_typetraits/reference/has_left_shift.html index 3c3f4c3..83166b3 100644 --- a/doc/html/boost_typetraits/reference/has_left_shift.html +++ b/doc/html/boost_typetraits/reference/has_left_shift.html @@ -62,6 +62,11 @@ or #include <boost/type_traits/has_operator.hpp> or #include <boost/type_traits.hpp>

    +

    + Compiler Compatibility: Requires working + SFINAE (i.e. BOOST_NO_SFINAE is not set). Only a minority of rather old compilers + do not support this. +

    Examples:

    @@ -111,12 +116,6 @@ See also:Operator Type Traits

    -

    - Limitation: -

    -
    • - Requires a compiler with working SFINAE. -

    Known issues:

    diff --git a/doc/html/boost_typetraits/reference/has_left_shift_assign.html b/doc/html/boost_typetraits/reference/has_left_shift_assign.html index 73cff28..7ff5107 100644 --- a/doc/html/boost_typetraits/reference/has_left_shift_assign.html +++ b/doc/html/boost_typetraits/reference/has_left_shift_assign.html @@ -62,6 +62,11 @@ or #include <boost/type_traits/has_operator.hpp> or #include <boost/type_traits.hpp>

    +

    + Compiler Compatibility: Requires working + SFINAE (i.e. BOOST_NO_SFINAE is not set). Only a minority of rather old compilers + do not support this. +

    Examples:

    @@ -99,12 +104,6 @@ See also:Operator Type Traits

    -

    - Limitation: -

    -
    • - Requires a compiler with working SFINAE. -

    Known issues:

    diff --git a/doc/html/boost_typetraits/reference/has_less.html b/doc/html/boost_typetraits/reference/has_less.html index 217e30c..9bf9414 100644 --- a/doc/html/boost_typetraits/reference/has_less.html +++ b/doc/html/boost_typetraits/reference/has_less.html @@ -62,6 +62,11 @@ or #include <boost/type_traits/has_operator.hpp> or #include <boost/type_traits.hpp>

    +

    + Compiler Compatibility: Requires working + SFINAE (i.e. BOOST_NO_SFINAE is not set). Only a minority of rather old compilers + do not support this. +

    Examples:

    @@ -104,12 +109,6 @@ See also:Operator Type Traits

    -

    - Limitation: -

    -
    • - Requires a compiler with working SFINAE. -

    Known issues:

    diff --git a/doc/html/boost_typetraits/reference/has_less_equal.html b/doc/html/boost_typetraits/reference/has_less_equal.html index 079acd9..7c7cb81 100644 --- a/doc/html/boost_typetraits/reference/has_less_equal.html +++ b/doc/html/boost_typetraits/reference/has_less_equal.html @@ -62,6 +62,11 @@ or #include <boost/type_traits/has_operator.hpp> or #include <boost/type_traits.hpp>

    +

    + Compiler Compatibility: Requires working + SFINAE (i.e. BOOST_NO_SFINAE is not set). Only a minority of rather old compilers + do not support this. +

    Examples:

    @@ -104,12 +109,6 @@ See also:Operator Type Traits

    -

    - Limitation: -

    -
    • - Requires a compiler with working SFINAE. -

    Known issues:

    diff --git a/doc/html/boost_typetraits/reference/has_logical_and.html b/doc/html/boost_typetraits/reference/has_logical_and.html index 97ceec9..fc71cd5 100644 --- a/doc/html/boost_typetraits/reference/has_logical_and.html +++ b/doc/html/boost_typetraits/reference/has_logical_and.html @@ -62,6 +62,11 @@ or #include <boost/type_traits/has_operator.hpp> or #include <boost/type_traits.hpp>

    +

    + Compiler Compatibility: Requires working + SFINAE (i.e. BOOST_NO_SFINAE is not set). Only a minority of rather old compilers + do not support this. +

    Examples:

    @@ -102,12 +107,6 @@ See also:Operator Type Traits

    -

    - Limitation: -

    -
    • - Requires a compiler with working SFINAE. -

    Known issues:

    diff --git a/doc/html/boost_typetraits/reference/has_logical_not.html b/doc/html/boost_typetraits/reference/has_logical_not.html index 29b8a67..56fe3a8 100644 --- a/doc/html/boost_typetraits/reference/has_logical_not.html +++ b/doc/html/boost_typetraits/reference/has_logical_not.html @@ -62,6 +62,11 @@ or #include <boost/type_traits/has_operator.hpp> or #include <boost/type_traits.hpp>

    +

    + Compiler Compatibility: Requires working + SFINAE (i.e. BOOST_NO_SFINAE is not set). Only a minority of rather old compilers + do not support this. +

    Examples:

    @@ -104,12 +109,6 @@ See also:Operator Type Traits

    -

    - Limitation: -

    -
    • - Requires a compiler with working SFINAE. -

    Known issues:

    diff --git a/doc/html/boost_typetraits/reference/has_logical_or.html b/doc/html/boost_typetraits/reference/has_logical_or.html index 8fa952b..2196395 100644 --- a/doc/html/boost_typetraits/reference/has_logical_or.html +++ b/doc/html/boost_typetraits/reference/has_logical_or.html @@ -62,6 +62,11 @@ or #include <boost/type_traits/has_operator.hpp> or #include <boost/type_traits.hpp>

    +

    + Compiler Compatibility: Requires working + SFINAE (i.e. BOOST_NO_SFINAE is not set). Only a minority of rather old compilers + do not support this. +

    Examples:

    @@ -102,12 +107,6 @@ See also:Operator Type Traits

    -

    - Limitation: -

    -
    • - Requires a compiler with working SFINAE. -

    Known issues:

    diff --git a/doc/html/boost_typetraits/reference/has_minus.html b/doc/html/boost_typetraits/reference/has_minus.html index 58ebbfe..db0b1a9 100644 --- a/doc/html/boost_typetraits/reference/has_minus.html +++ b/doc/html/boost_typetraits/reference/has_minus.html @@ -62,6 +62,11 @@ or #include <boost/type_traits/has_operator.hpp> or #include <boost/type_traits.hpp>

    +

    + Compiler Compatibility: Requires working + SFINAE (i.e. BOOST_NO_SFINAE is not set). Only a minority of rather old compilers + do not support this. +

    Examples:

    @@ -105,12 +110,6 @@ See also:Operator Type Traits

    -

    - Limitation: -

    -
    • - Requires a compiler with working SFINAE. -

    Known issues:

    diff --git a/doc/html/boost_typetraits/reference/has_minus_assign.html b/doc/html/boost_typetraits/reference/has_minus_assign.html index 7b4f363..f78699d 100644 --- a/doc/html/boost_typetraits/reference/has_minus_assign.html +++ b/doc/html/boost_typetraits/reference/has_minus_assign.html @@ -62,6 +62,11 @@ or #include <boost/type_traits/has_operator.hpp> or #include <boost/type_traits.hpp>

    +

    + Compiler Compatibility: Requires working + SFINAE (i.e. BOOST_NO_SFINAE is not set). Only a minority of rather old compilers + do not support this. +

    Examples:

    @@ -105,12 +110,6 @@ See also:Operator Type Traits

    -

    - Limitation: -

    -
    • - Requires a compiler with working SFINAE. -

    Known issues:

    diff --git a/doc/html/boost_typetraits/reference/has_modulus.html b/doc/html/boost_typetraits/reference/has_modulus.html index 6040ca9..3a9a322 100644 --- a/doc/html/boost_typetraits/reference/has_modulus.html +++ b/doc/html/boost_typetraits/reference/has_modulus.html @@ -62,6 +62,11 @@ or #include <boost/type_traits/has_operator.hpp> or #include <boost/type_traits.hpp>

    +

    + Compiler Compatibility: Requires working + SFINAE (i.e. BOOST_NO_SFINAE is not set). Only a minority of rather old compilers + do not support this. +

    Examples:

    @@ -98,12 +103,6 @@ See also:Operator Type Traits

    -

    - Limitation: -

    -
    • - Requires a compiler with working SFINAE. -

    Known issues:

    diff --git a/doc/html/boost_typetraits/reference/has_modulus_assign.html b/doc/html/boost_typetraits/reference/has_modulus_assign.html index 6d5c366..0468489 100644 --- a/doc/html/boost_typetraits/reference/has_modulus_assign.html +++ b/doc/html/boost_typetraits/reference/has_modulus_assign.html @@ -62,6 +62,11 @@ or #include <boost/type_traits/has_operator.hpp> or #include <boost/type_traits.hpp>

    +

    + Compiler Compatibility: Requires working + SFINAE (i.e. BOOST_NO_SFINAE is not set). Only a minority of rather old compilers + do not support this. +

    Examples:

    @@ -98,12 +103,6 @@ See also:Operator Type Traits

    -

    - Limitation: -

    -
    • - Requires a compiler with working SFINAE. -

    Known issues:

    diff --git a/doc/html/boost_typetraits/reference/has_multiplies.html b/doc/html/boost_typetraits/reference/has_multiplies.html index 32524b5..456f941 100644 --- a/doc/html/boost_typetraits/reference/has_multiplies.html +++ b/doc/html/boost_typetraits/reference/has_multiplies.html @@ -62,6 +62,11 @@ or #include <boost/type_traits/has_operator.hpp> or #include <boost/type_traits.hpp>

    +

    + Compiler Compatibility: Requires working + SFINAE (i.e. BOOST_NO_SFINAE is not set). Only a minority of rather old compilers + do not support this. +

    Examples:

    @@ -105,12 +110,6 @@ See also:Operator Type Traits

    -

    - Limitation: -

    -
    • - Requires a compiler with working SFINAE. -

    Known issues:

    diff --git a/doc/html/boost_typetraits/reference/has_multiplies_assign.html b/doc/html/boost_typetraits/reference/has_multiplies_assign.html index 3416299..8089c33 100644 --- a/doc/html/boost_typetraits/reference/has_multiplies_assign.html +++ b/doc/html/boost_typetraits/reference/has_multiplies_assign.html @@ -62,6 +62,11 @@ or #include <boost/type_traits/has_operator.hpp> or #include <boost/type_traits.hpp>

    +

    + Compiler Compatibility: Requires working + SFINAE (i.e. BOOST_NO_SFINAE is not set). Only a minority of rather old compilers + do not support this. +

    Examples:

    @@ -105,12 +110,6 @@ See also:Operator Type Traits

    -

    - Limitation: -

    -
    • - Requires a compiler with working SFINAE. -

    Known issues:

    diff --git a/doc/html/boost_typetraits/reference/has_negate.html b/doc/html/boost_typetraits/reference/has_negate.html index 2b24f39..1ff940a 100644 --- a/doc/html/boost_typetraits/reference/has_negate.html +++ b/doc/html/boost_typetraits/reference/has_negate.html @@ -62,6 +62,11 @@ or #include <boost/type_traits/has_operator.hpp> or #include <boost/type_traits.hpp>

    +

    + Compiler Compatibility: Requires working + SFINAE (i.e. BOOST_NO_SFINAE is not set). Only a minority of rather old compilers + do not support this. +

    Examples:

    @@ -104,12 +109,6 @@ See also:Operator Type Traits

    -

    - Limitation: -

    -
    • - Requires a compiler with working SFINAE. -

    Known issues:

    diff --git a/doc/html/boost_typetraits/reference/has_new_operator.html b/doc/html/boost_typetraits/reference/has_new_operator.html index ced84ef..7999fc2 100644 --- a/doc/html/boost_typetraits/reference/has_new_operator.html +++ b/doc/html/boost_typetraits/reference/has_new_operator.html @@ -35,10 +35,9 @@ otherwise inherits from false_type.

    - Compiler Compatibility: Not usable with - compilers that do not support "substitution failure is not an error" - (in which case BOOST_NO_SFINAE will be defined), also known to be broken - with the Borland/Codegear compiler. + Compiler Compatibility: Requires working + SFINAE (i.e. BOOST_NO_SFINAE is not set). Only a minority of rather old compilers + do not support this. Also known to be broken with the Borland/Codegear compilers.

    C++ Standard Reference: 12.5. diff --git a/doc/html/boost_typetraits/reference/has_not_equal_to.html b/doc/html/boost_typetraits/reference/has_not_equal_to.html index 83d942a..60ec945 100644 --- a/doc/html/boost_typetraits/reference/has_not_equal_to.html +++ b/doc/html/boost_typetraits/reference/has_not_equal_to.html @@ -62,6 +62,11 @@ or #include <boost/type_traits/has_operator.hpp> or #include <boost/type_traits.hpp>

    +

    + Compiler Compatibility: Requires working + SFINAE (i.e. BOOST_NO_SFINAE is not set). Only a minority of rather old compilers + do not support this. +

    Examples:

    @@ -104,12 +109,6 @@ See also:Operator Type Traits

    -

    - Limitation: -

    -
    • - Requires a compiler with working SFINAE. -

    Known issues:

    diff --git a/doc/html/boost_typetraits/reference/has_nothrow_assign.html b/doc/html/boost_typetraits/reference/has_nothrow_assign.html index 1fa6c4d..f0c4494 100644 --- a/doc/html/boost_typetraits/reference/has_nothrow_assign.html +++ b/doc/html/boost_typetraits/reference/has_nothrow_assign.html @@ -37,16 +37,9 @@ type.

    - Compiler Compatibility: If the compiler - does not support partial-specialization of class templates, then this template - can not be used with function types. -

    -

    - Without some (as yet unspecified) help from the compiler, has_nothrow_assign - will never report that a class or struct has a non-throwing assignment-operator; - this is always safe, if possibly sub-optimal. Currently (May 2005) only Visual - C++ 8 has the necessary compiler support to ensure that this trait "just - works". + Compiler Compatibility: Either a compiler + intrinsic (for example this is provided by Visual C++ 8 or later, plus all + GCC versions in C++11 mode), alternatively support for the C++11 noexcept feature.

    Header: #include diff --git a/doc/html/boost_typetraits/reference/has_plus.html b/doc/html/boost_typetraits/reference/has_plus.html index d17e1c2..946261d 100644 --- a/doc/html/boost_typetraits/reference/has_plus.html +++ b/doc/html/boost_typetraits/reference/has_plus.html @@ -62,6 +62,11 @@ or #include <boost/type_traits/has_operator.hpp> or #include <boost/type_traits.hpp>

    +

    + Compiler Compatibility: Requires working + SFINAE (i.e. BOOST_NO_SFINAE is not set). Only a minority of rather old compilers + do not support this. +

    Examples:

    @@ -105,12 +110,6 @@ See also: Operator Type Traits

    -

    - Limitation: -

    -
    • - Requires a compiler with working SFINAE. -

    Known issues:

    diff --git a/doc/html/boost_typetraits/reference/has_plus_assign.html b/doc/html/boost_typetraits/reference/has_plus_assign.html index e531f31..d47688d 100644 --- a/doc/html/boost_typetraits/reference/has_plus_assign.html +++ b/doc/html/boost_typetraits/reference/has_plus_assign.html @@ -62,6 +62,11 @@ or #include <boost/type_traits/has_operator.hpp> or #include <boost/type_traits.hpp>

    +

    + Compiler Compatibility: Requires working + SFINAE (i.e. BOOST_NO_SFINAE is not set). Only a minority of rather old compilers + do not support this. +

    Examples:

    @@ -105,12 +110,6 @@ See also: Operator Type Traits

    -

    - Limitation: -

    -
    • - Requires a compiler with working SFINAE. -

    Known issues:

    diff --git a/doc/html/boost_typetraits/reference/has_post_decrement.html b/doc/html/boost_typetraits/reference/has_post_decrement.html index 79c785d..6b43ff9 100644 --- a/doc/html/boost_typetraits/reference/has_post_decrement.html +++ b/doc/html/boost_typetraits/reference/has_post_decrement.html @@ -62,6 +62,11 @@ or #include <boost/type_traits/has_operator.hpp> or #include <boost/type_traits.hpp>

    +

    + Compiler Compatibility: Requires working + SFINAE (i.e. BOOST_NO_SFINAE is not set). Only a minority of rather old compilers + do not support this. +

    Examples:

    @@ -112,12 +117,6 @@ See also: Operator Type Traits

    -

    - Limitation: -

    -
    • - Requires a compiler with working SFINAE. -

    Known issues:

    diff --git a/doc/html/boost_typetraits/reference/has_post_increment.html b/doc/html/boost_typetraits/reference/has_post_increment.html index 98bdbf9..3ee62a5 100644 --- a/doc/html/boost_typetraits/reference/has_post_increment.html +++ b/doc/html/boost_typetraits/reference/has_post_increment.html @@ -62,6 +62,11 @@ or #include <boost/type_traits/has_operator.hpp> or #include <boost/type_traits.hpp>

    +

    + Compiler Compatibility: Requires working + SFINAE (i.e. BOOST_NO_SFINAE is not set). Only a minority of rather old compilers + do not support this. +

    Examples:

    @@ -112,12 +117,6 @@ See also: Operator Type Traits

    -

    - Limitation: -

    -
    • - Requires a compiler with working SFINAE. -

    Known issues:

    diff --git a/doc/html/boost_typetraits/reference/has_pre_decrement.html b/doc/html/boost_typetraits/reference/has_pre_decrement.html index 3cba0d0..0f18539 100644 --- a/doc/html/boost_typetraits/reference/has_pre_decrement.html +++ b/doc/html/boost_typetraits/reference/has_pre_decrement.html @@ -62,6 +62,11 @@ or #include <boost/type_traits/has_operator.hpp> or #include <boost/type_traits.hpp>

    +

    + Compiler Compatibility: Requires working + SFINAE (i.e. BOOST_NO_SFINAE is not set). Only a minority of rather old compilers + do not support this. +

    Examples:

    @@ -112,12 +117,6 @@ See also: Operator Type Traits

    -

    - Limitation: -

    -
    • - Requires a compiler with working SFINAE. -

    Known issues:

    diff --git a/doc/html/boost_typetraits/reference/has_pre_increment.html b/doc/html/boost_typetraits/reference/has_pre_increment.html index 1aed395..e361bca 100644 --- a/doc/html/boost_typetraits/reference/has_pre_increment.html +++ b/doc/html/boost_typetraits/reference/has_pre_increment.html @@ -62,6 +62,11 @@ or #include <boost/type_traits/has_operator.hpp> or #include <boost/type_traits.hpp>

    +

    + Compiler Compatibility: Requires working + SFINAE (i.e. BOOST_NO_SFINAE is not set). Only a minority of rather old compilers + do not support this. +

    Examples:

    @@ -112,12 +117,6 @@ See also: Operator Type Traits

    -

    - Limitation: -

    -
    • - Requires a compiler with working SFINAE. -

    Known issues:

    diff --git a/doc/html/boost_typetraits/reference/has_right_shift.html b/doc/html/boost_typetraits/reference/has_right_shift.html index 9b63f66..9961fff 100644 --- a/doc/html/boost_typetraits/reference/has_right_shift.html +++ b/doc/html/boost_typetraits/reference/has_right_shift.html @@ -62,6 +62,11 @@ or #include <boost/type_traits/has_operator.hpp> or #include <boost/type_traits.hpp>

    +

    + Compiler Compatibility: Requires working + SFINAE (i.e. BOOST_NO_SFINAE is not set). Only a minority of rather old compilers + do not support this. +

    Examples:

    @@ -111,12 +116,6 @@ See also: Operator Type Traits

    -

    - Limitation: -

    -
    • - Requires a compiler with working SFINAE. -

    Known issues:

    diff --git a/doc/html/boost_typetraits/reference/has_right_shift_assign.html b/doc/html/boost_typetraits/reference/has_right_shift_assign.html index cdbb4e4..fceeead 100644 --- a/doc/html/boost_typetraits/reference/has_right_shift_assign.html +++ b/doc/html/boost_typetraits/reference/has_right_shift_assign.html @@ -62,6 +62,11 @@ or #include <boost/type_traits/has_operator.hpp> or #include <boost/type_traits.hpp>

    +

    + Compiler Compatibility: Requires working + SFINAE (i.e. BOOST_NO_SFINAE is not set). Only a minority of rather old compilers + do not support this. +

    Examples:

    @@ -103,12 +108,6 @@ See also: Operator Type Traits

    -

    - Limitation: -

    -
    • - Requires a compiler with working SFINAE. -

    Known issues:

    diff --git a/doc/html/boost_typetraits/reference/has_unary_minus.html b/doc/html/boost_typetraits/reference/has_unary_minus.html index 607fb80..081295d 100644 --- a/doc/html/boost_typetraits/reference/has_unary_minus.html +++ b/doc/html/boost_typetraits/reference/has_unary_minus.html @@ -62,6 +62,11 @@ or #include <boost/type_traits/has_operator.hpp> or #include <boost/type_traits.hpp>

    +

    + Compiler Compatibility: Requires working + SFINAE (i.e. BOOST_NO_SFINAE is not set). Only a minority of rather old compilers + do not support this. +

    Examples:

    @@ -104,12 +109,6 @@ See also: Operator Type Traits

    -

    - Limitation: -

    -
    • - Requires a compiler with working SFINAE. -

    Known issues:

    diff --git a/doc/html/boost_typetraits/reference/has_unary_plus.html b/doc/html/boost_typetraits/reference/has_unary_plus.html index e39202b..d32e6c8 100644 --- a/doc/html/boost_typetraits/reference/has_unary_plus.html +++ b/doc/html/boost_typetraits/reference/has_unary_plus.html @@ -62,6 +62,11 @@ or #include <boost/type_traits/has_operator.hpp> or #include <boost/type_traits.hpp>

    +

    + Compiler Compatibility: Requires working + SFINAE (i.e. BOOST_NO_SFINAE is not set). Only a minority of rather old compilers + do not support this. +

    Examples:

    @@ -104,12 +109,6 @@ See also: Operator Type Traits

    -

    - Limitation: -

    -
    • - Requires a compiler with working SFINAE. -

    Known issues:

    diff --git a/doc/html/boost_typetraits/reference/remove_all_extents.html b/doc/html/boost_typetraits/reference/remove_all_extents.html index 1cf7c1c..212417d 100644 --- a/doc/html/boost_typetraits/reference/remove_all_extents.html +++ b/doc/html/boost_typetraits/reference/remove_all_extents.html @@ -45,7 +45,7 @@ does not support partial specialization of class-templates then this template will compile, but the member type will always be the same as type T - except where compiler + except where compiler workarounds have been applied.

    diff --git a/doc/html/boost_typetraits/reference/remove_const.html b/doc/html/boost_typetraits/reference/remove_const.html index 8df345c..cd88642 100644 --- a/doc/html/boost_typetraits/reference/remove_const.html +++ b/doc/html/boost_typetraits/reference/remove_const.html @@ -44,7 +44,7 @@ does not support partial specialization of class-templates then this template will compile, but the member type will always be the same as type T - except where compiler + except where compiler workarounds have been applied.

    diff --git a/doc/html/boost_typetraits/reference/remove_cv.html b/doc/html/boost_typetraits/reference/remove_cv.html index 0d1617a..933e79d 100644 --- a/doc/html/boost_typetraits/reference/remove_cv.html +++ b/doc/html/boost_typetraits/reference/remove_cv.html @@ -44,7 +44,7 @@ does not support partial specialization of class-templates then this template will compile, but the member type will always be the same as type T - except where compiler + except where compiler workarounds have been applied.

    diff --git a/doc/html/boost_typetraits/reference/remove_extent.html b/doc/html/boost_typetraits/reference/remove_extent.html index de463fe..bb5b7b3 100644 --- a/doc/html/boost_typetraits/reference/remove_extent.html +++ b/doc/html/boost_typetraits/reference/remove_extent.html @@ -45,7 +45,7 @@ does not support partial specialization of class-templates then this template will compile, but the member type will always be the same as type T - except where compiler + except where compiler workarounds have been applied.

    diff --git a/doc/html/boost_typetraits/reference/remove_pointer.html b/doc/html/boost_typetraits/reference/remove_pointer.html index a8715ae..de1db74 100644 --- a/doc/html/boost_typetraits/reference/remove_pointer.html +++ b/doc/html/boost_typetraits/reference/remove_pointer.html @@ -46,7 +46,7 @@ does not support partial specialization of class-templates then this template will compile, but the member type will always be the same as type T - except where compiler + except where compiler workarounds have been applied.

    diff --git a/doc/html/boost_typetraits/reference/remove_reference.html b/doc/html/boost_typetraits/reference/remove_reference.html index ebb2efb..4ffeff9 100644 --- a/doc/html/boost_typetraits/reference/remove_reference.html +++ b/doc/html/boost_typetraits/reference/remove_reference.html @@ -44,7 +44,7 @@ does not support partial specialization of class-templates then this template will compile, but the member type will always be the same as type T - except where compiler + except where compiler workarounds have been applied.

    diff --git a/doc/html/boost_typetraits/reference/remove_volatile.html b/doc/html/boost_typetraits/reference/remove_volatile.html index ccc3bd1..57f4735 100644 --- a/doc/html/boost_typetraits/reference/remove_volatile.html +++ b/doc/html/boost_typetraits/reference/remove_volatile.html @@ -44,7 +44,7 @@ does not support partial specialization of class-templates then this template will compile, but the member type will always be the same as type T - except where compiler + except where compiler workarounds have been applied.

    diff --git a/doc/html/index/s11.html b/doc/html/index/s11.html index 65b34db..198d865 100644 --- a/doc/html/index/s11.html +++ b/doc/html/index/s11.html @@ -24,7 +24,7 @@

    -Class Index

    +Class Index

    A C D E F H I M N O P R T

    diff --git a/doc/html/index/s12.html b/doc/html/index/s12.html index c088da1..268e753 100644 --- a/doc/html/index/s12.html +++ b/doc/html/index/s12.html @@ -24,7 +24,7 @@

    -Typedef Index

    +Typedef Index

    F R T V

    diff --git a/doc/html/index/s13.html b/doc/html/index/s13.html index 6119a5a..6db8623 100644 --- a/doc/html/index/s13.html +++ b/doc/html/index/s13.html @@ -24,7 +24,7 @@

    -Macro Index

    +Macro Index

    B

    @@ -36,10 +36,6 @@
  • -

    BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION

    - -
  • -
  • BOOST_COMMON_TYPE_DONT_USE_TYPEOF

  • diff --git a/doc/html/index/s14.html b/doc/html/index/s14.html index b2c227f..47b53f0 100644 --- a/doc/html/index/s14.html +++ b/doc/html/index/s14.html @@ -23,7 +23,7 @@

    -Index

    +Index

    A B C D E F H I M N O P R T U V

    @@ -67,10 +67,6 @@
  • -

    BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION

    - -
  • -
  • BOOST_COMMON_TYPE_DONT_USE_TYPEOF

  • @@ -988,10 +984,6 @@

    true_type

    -
  • -

    Type Traits that Transform One Type to Another

    - -
  • type_with_alignment

  • diff --git a/doc/intrinsics.qbk b/doc/intrinsics.qbk index c02e5c8..c824a1f 100644 --- a/doc/intrinsics.qbk +++ b/doc/intrinsics.qbk @@ -20,6 +20,8 @@ for all types * __is_final * __is_union * __is_pod +* __is_nothrow_move_assignable +* __is_nothrow_move_constructible * __has_trivial_constructor * __has_trivial_copy * __has_trivial_move_constructor @@ -37,6 +39,7 @@ the compilers we know about: * __is_empty * __is_polymorphic +* __is_virtual_base_of The following traits classes are dependent on one or more of the above: @@ -48,30 +51,30 @@ The hooks for compiler-intrinsic support are defined in a 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_MOVE_CONSTRUCTOR(T)][Should evaluate to true if T has a trivial move 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_MOVE_ASSIGN(T)][Should evaluate to true if T has a trivial move 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_NOTHROW_MOVE_ASSIGN(T)][Should evaluate to true T has a non-throwing move assign operator.]] - [[BOOST_IS_NOTHROW_MOVE_CONSTRUCT(T)][Should evaluate to true T has a non-throwing move constructor.]] - + [[BOOST_ALIGNMENT_OF(T)][Should evaluate to the alignment requirements of type T]] [[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_EMPTY(T)][Should evaluate to true if T is an empty struct or union]] [[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]] [[BOOST_IS_FINAL(T)][Should evaluate to true if T is a class type declared with the final specifier]] + [[BOOST_IS_NOTHROW_MOVE_ASSIGN(T)][Should evaluate to true T has a non-throwing move assign operator.]] + [[BOOST_IS_NOTHROW_MOVE_CONSTRUCT(T)][Should evaluate to true T has a non-throwing move constructor.]] + [[BOOST_IS_POLYMORPHIC(T)][Should evaluate to true if T is a polymorphic type]] + [[BOOST_IS_POD(T)][Should evaluate to true if T is a POD type]] + [[BOOST_IS_UNION(T)][Should evaluate to true if T is a union type]] + [[BOOST_HAS_NOTHROW_ASSIGN(T)][Should evaluate to true if `T t, u; t = u` can not throw]] + [[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_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_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_DESTRUCTOR(T)][Should evaluate to true if T has a trivial destructor (i.e. ~T() has no effect)]] + [[BOOST_HAS_TRIVIAL_MOVE_CONSTRUCTOR(T)][Should evaluate to true if T has a trivial move constructor (and can therefore be replaced by a call to memcpy)]] + [[BOOST_HAS_TRIVIAL_MOVE_ASSIGN(T)][Should evaluate to true if T has a trivial move assignment operator (and can therefore be replaced by a call to memcpy)]] + [[BOOST_HAS_VIRTUAL_DESTRUCTOR(T)][Should evaluate to true T has a virtual destructor]] + ] diff --git a/doc/mpl.qbk b/doc/mpl.qbk index cc023d6..8b49206 100644 --- a/doc/mpl.qbk +++ b/doc/mpl.qbk @@ -8,13 +8,12 @@ [section:mpl MPL Interoperability] All the value based traits in this library conform to MPL's requirements -for an [@../../../../libs/mpl/doc/refmanual/integral-constant.html Integral Constant type]: that includes a number of rather intrusive -workarounds for broken compilers. +for an [@../../../../libs/mpl/doc/refmanual/integral-constant.html Integral Constant type]. -Purely as an implementation detail, this -means that `__true_type` inherits from [@../../../../libs/mpl/doc/refmanual/bool.html `boost::mpl::true_`], `__false_type` inherits -from [@../../../../libs/mpl/doc/refmanual/bool.html `boost::mpl::false_`], and `__integral_constant` inherits from -[@../../../../libs/mpl/doc/refmanual/integral-c.html `boost::mpl::integral_c`] (provided `T` is not `bool`) +Please note that these types no longer inherit from `mpl::true_` or `mpl::false_` etc, and the library +will no longer implicitly include any MPL header. However there is an implicit conversion from +`integral_constant` to the corresponding MPL types, therefore tag-dispatching that uses MPL types +in function overloads will still work as before. [endsect] diff --git a/doc/transform_traits.qbk b/doc/transform_traits.qbk index 980ebe4..2e70c15 100644 --- a/doc/transform_traits.qbk +++ b/doc/transform_traits.qbk @@ -80,51 +80,5 @@ result of applying the transformation to the template argument `T`. template struct __remove_volatile; -[h4 Broken Compiler Workarounds:] - -For all of these templates support for partial specialization of class templates is -required to correctly implement the transformation. -On the other hand, practice shows that many of the templates from this -category are very useful, and often essential for implementing some -generic libraries. Lack of these templates is often one of the major -limiting factors in porting those libraries to compilers that do not yet -support this language feature. As some of these compilers are going to be -around for a while, and at least one of them is very wide-spread, -it was decided that the library should provide workarounds where possible. - -The basic idea behind the workaround is to manually define full -specializations of all type transformation templates for all fundamental types, -and all their 1st and 2nd rank cv-[un]qualified derivative pointer types, and to -provide a user-level macro that will define all the explicit specializations needed -for any user-defined type T. - -The first part guarantees the successful compilation of something like this: - - BOOST_STATIC_ASSERT((is_same::type>::value)); - BOOST_STATIC_ASSERT((is_same::type>::value)); - BOOST_STATIC_ASSERT((is_same::type>::value)); - BOOST_STATIC_ASSERT((is_same::type>::value)); - BOOST_STATIC_ASSERT((is_same::type>::value)); - BOOST_STATIC_ASSERT((is_same::type>::value)); - ... - BOOST_STATIC_ASSERT((is_same::type>::value)); - -and the second part provides the library's users with a mechanism to make the -above code work not only for `char`, `int` or other built-in type, -but for their own types as well: - - namespace myspace{ - struct MyClass {}; - } - // declare this at global scope: - BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(myspace::MyClass) - // transformations on myspace::MyClass now work: - BOOST_STATIC_ASSERT((is_same::type>::value)); - BOOST_STATIC_ASSERT((is_same::type>::value)); - // etc. - -Note that the macro BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION evaluates -to nothing on those compilers that *do* support partial specialization. - [endsect] diff --git a/doc/type_traits.qbk b/doc/type_traits.qbk index 3965809..186da70 100644 --- a/doc/type_traits.qbk +++ b/doc/type_traits.qbk @@ -132,6 +132,11 @@ [def __decay [link boost_typetraits.reference.decay decay]] [def __is_complex [link boost_typetraits.reference.is_complex is_complex]] +[def __compat [*Compiler Compatibility:]] +[template all_compilers[] __compat All current compilers are supported by this trait.] +[template has_binary_operator_compat[] __compat Requires working SFINAE (i.e. BOOST_NO_SFINAE is not set). Only a minority of rather old compilers do not support this.] + + A printer-friendly [@http://sourceforge.net/projects/boost/files/boost-docs/ PDF version of this manual is also available].