|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r73778 - in sandbox/conversion/boost/conversion: . fp type_traits
From: vicente.botet_at_[hidden]
Date: 2011-08-15 12:47:04
Author: viboes
Date: 2011-08-15 12:47:01 EDT (Mon, 15 Aug 2011)
New Revision: 73778
URL: http://svn.boost.org/trac/boost/changeset/73778
Log:
conversion: update comments
Text files modified:
sandbox/conversion/boost/conversion/assign_to.hpp | 14 ++++++++++++++
sandbox/conversion/boost/conversion/convert_to.hpp | 15 ++++++---------
sandbox/conversion/boost/conversion/convert_to_or_fallback.hpp | 12 ++++++++++++
sandbox/conversion/boost/conversion/explicit_convert_to.hpp | 8 ++++----
sandbox/conversion/boost/conversion/fp/convert_to.hpp | 18 ++++++++++++++----
sandbox/conversion/boost/conversion/implicit_convert_to.hpp | 6 +++---
sandbox/conversion/boost/conversion/is_extrinsically_assignable.hpp | 12 +++++++++---
sandbox/conversion/boost/conversion/is_extrinsically_convertible.hpp | 6 +++++-
sandbox/conversion/boost/conversion/is_extrinsically_explicit_convertible.hpp | 6 +++++-
sandbox/conversion/boost/conversion/try_assign_to.hpp | 28 +++++++++++++++++++++-------
sandbox/conversion/boost/conversion/try_convert_to.hpp | 28 ++++++++++++++++++++++------
sandbox/conversion/boost/conversion/type_traits/is_assignable.hpp | 33 ++++++++++++++++++++++++---------
sandbox/conversion/boost/conversion/type_traits/is_constructible.hpp | 17 ++++++++++++-----
sandbox/conversion/boost/conversion/type_traits/is_copy_assignable.hpp | 2 +-
sandbox/conversion/boost/conversion/type_traits/is_copy_constructible.hpp | 2 +-
sandbox/conversion/boost/conversion/type_traits/is_default_constructible.hpp | 5 ++++-
sandbox/conversion/boost/conversion/type_traits/is_destructible.hpp | 16 +++++++++++-----
sandbox/conversion/boost/conversion/type_traits/is_explicitly_convertible.hpp | 11 ++++++++---
sandbox/conversion/boost/conversion/type_traits/is_move_assignable.hpp | 11 +++++++++--
sandbox/conversion/boost/conversion/type_traits/is_move_constructible.hpp | 10 ++++++++--
20 files changed, 193 insertions(+), 67 deletions(-)
Modified: sandbox/conversion/boost/conversion/assign_to.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/assign_to.hpp (original)
+++ sandbox/conversion/boost/conversion/assign_to.hpp 2011-08-15 12:47:01 EDT (Mon, 15 Aug 2011)
@@ -15,6 +15,20 @@
*
* The function @c assign_to assigns the @c from parameter to the @c to parameter.
*
+ * The default behavior uses the assignment operator when the @c Target is assignable from the @c Source,
+ * or makes an implicit conversion of the @ Source before assignment when the @c Source is
+ * implicitly convertible to @c Target.
+ *
+ * When the default behavior is not satisfactory or doesn't takes care of
+ * specific types, the user could customize the behavior of
+ * @c assign_to in two ways:
+ *
+ * - overload the @c assign_to on any namespace found by ADL from the
+ * @c Source or the @c Target.
+ * - partially specialize the @c boost::conversion::assigner_cp struct.
+ *
+ * @note As we can not add new functions on the @c std namespace, partial
+ * specialization is the only option in these cases.
*/
#ifndef BOOST_CONVERSION_ASSIGN_TO_HPP
Modified: sandbox/conversion/boost/conversion/convert_to.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/convert_to.hpp (original)
+++ sandbox/conversion/boost/conversion/convert_to.hpp 2011-08-15 12:47:01 EDT (Mon, 15 Aug 2011)
@@ -20,19 +20,12 @@
#include <boost/conversion/explicit_convert_to.hpp>
+#include <boost/conversion/is_extrinsically_explicit_convertible.hpp>
namespace boost {
namespace conversion {
- //! meta-function to state if the parameter is a place_holder
- //!
- //! @tparam T The type to check for.
- //! @tparam Enable A dummy parameter that can be used for SFINAE.
- //! The nested type @c type is @c false_type or @c true_type which default to @c false_type.
- //! Specific specialization would make this meta-function to be @c true_type.
- template <typename T, typename Enabled=void>
- struct enable_functor : false_type {};
//! @brief Extrinsic conversion function.
@@ -50,7 +43,11 @@
//! This function doesn't participate on overload resolution when @c conversion::enable_functor<Source>::type is mpl::true_.
template <typename Target, typename Source>
#if !defined(BOOST_CONVERSION_DOXYGEN_INVOKED)
- typename disable_if<typename conversion::enable_functor<Source>::type, Target>::type
+ //typename disable_if<typename conversion::enable_functor<Source>::type, Target>::type
+ typename enable_if_c<
+ conversion::is_extrinsically_explicit_convertible<Source,Target>::value,
+ Target
+ >::type
#else
Target
#endif
Modified: sandbox/conversion/boost/conversion/convert_to_or_fallback.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/convert_to_or_fallback.hpp (original)
+++ sandbox/conversion/boost/conversion/convert_to_or_fallback.hpp 2011-08-15 12:47:01 EDT (Mon, 15 Aug 2011)
@@ -22,6 +22,18 @@
* @c Source class or the copy constructor of the @c Target class.
* When an exception is thrown the fallback is returned.
* Of course if both exist the conversion is ambiguous.
+ *
+ * When the default behavior is not satisfactory or doesn't takes care of
+ * specific types, the user could customize the behavior of
+ * @c convert_to_or_fallback in two ways:
+ *
+ * - overload the @c convert_to_or_fallback on any namespace found by ADL from the
+ * @c Source or the @c Target. A trick is used to overload on the return type
+ * by adding a dummy parameter depending on the @c Target.
+ * - partially specialize the @c boost::conversion::converter_or_fallbacker_cp struct.
+ *
+ * @note As we can not add new functions on the @c std namespace, partial
+ * specialization is the only option in these cases.
*/
#ifndef BOOST_CONVERSION_CONVERT_TO_OR_FALLBACK_HPP
Modified: sandbox/conversion/boost/conversion/explicit_convert_to.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/explicit_convert_to.hpp (original)
+++ sandbox/conversion/boost/conversion/explicit_convert_to.hpp 2011-08-15 12:47:01 EDT (Mon, 15 Aug 2011)
@@ -19,17 +19,17 @@
* implicitly convertible to @c Target and the extrinsic implicit conversion when
* @c Source is extrinsically implicitly convertible to @c Target.
*
- * When the default behavior is not satisfactory or it doesn't takes care of
+ * When the default behavior is not satisfactory or doesn't takes care of
* specific types, the user could customize the behavior of
* @c explicit_convert_to in two ways:
*
- * * overload the @c explicit_convert_to on any namespace found by ADL from the
+ * - overload the @c explicit_convert_to on any namespace found by ADL from the
* @c Source or the @c Target. A trick is used to overload on the return type
* by adding a dummy parameter depending on the @c Target.
- * * partially specialize the @c boost::conversion::explicit_converter_cp struct.
+ * - partially specialize the @c boost::conversion::explicit_converter_cp struct.
*
* @note As we can not add new functions on the @c std namespace, partial
- * specialization is the only option.
+ * specialization is the only option in these cases.
*/
#ifndef BOOST_CONVERSION_EXPLICIT_CONVERT_TO_HPP
Modified: sandbox/conversion/boost/conversion/fp/convert_to.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/fp/convert_to.hpp (original)
+++ sandbox/conversion/boost/conversion/fp/convert_to.hpp 2011-08-15 12:47:01 EDT (Mon, 15 Aug 2011)
@@ -40,6 +40,16 @@
namespace boost {
namespace conversion {
+#if 1
+ //! meta-function to state if the parameter is a place_holder
+ //!
+ //! @tparam T The type to check for.
+ //! @tparam Enable A dummy parameter that can be used for SFINAE.
+
+ //! The nested type @c type is @c false_type or @c true_type which default to @c false_type.
+ //! Specific specialization would make this meta-function to be @c true_type.
+ template <typename T, typename Enabled=void>
+ struct enable_functor : false_type {};
//! @c enable_functor meta-function specialization for types @c T satisfying @c phoenix::is_actor<T>.
@@ -53,6 +63,7 @@
#endif
> : true_type {};
+#endif
namespace detail {
struct convert_to_eval
{
@@ -128,14 +139,13 @@
template <typename Target, typename Source>
inline
#if !defined(BOOST_CONVERSION_DOXYGEN_INVOKED)
- typename enable_if<typename boost::conversion::enable_functor<Source>::type,
+ typename enable_if_c<phoenix::is_actor<Source>::value,
typename expression::convert_to<boost::phoenix::detail::target<Target>, Source>::type const
>::type
#else
- typename enable_if<typename boost::conversion::enable_functor<Source>::type,
- typename expression::convert_to<boost::phoenix::detail::target<Target>, Source>::type const
+ typename enable_if_c<phoenix::is_actor<Source>::value,
+ unspecified_converter_type
>::type
- //unspecified_converter_type
#endif
convert_to(Source const& u)
{
Modified: sandbox/conversion/boost/conversion/implicit_convert_to.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/implicit_convert_to.hpp (original)
+++ sandbox/conversion/boost/conversion/implicit_convert_to.hpp 2011-08-15 12:47:01 EDT (Mon, 15 Aug 2011)
@@ -23,13 +23,13 @@
* specific types, the user could customize the behavior of
* @c implicit_convert_to in two ways:
*
- * * overload the @c implicit_convert_to on any namespace found by ADL from the
+ * - overload the @c implicit_convert_to on any namespace found by ADL from the
* @c Source or the @c Target. A trick is used to overload on the return type
* by adding a dummy parameter depending on the @c Target.
- * * partially specialize the @c boost::conversion::implicit_converter_cp struct.
+ * - partially specialize the @c boost::conversion::implicit_converter_cp struct.
*
* @note As we can not add new functions on the @c std namespace, partial
- * specialization is the only option.
+ * specialization is the only option in these cases.
*
*/
#ifndef BOOST_CONVERSION_IMPLICIT_CONVERT_TO_HPP
Modified: sandbox/conversion/boost/conversion/is_extrinsically_assignable.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/is_extrinsically_assignable.hpp (original)
+++ sandbox/conversion/boost/conversion/is_extrinsically_assignable.hpp 2011-08-15 12:47:01 EDT (Mon, 15 Aug 2011)
@@ -21,19 +21,25 @@
/**
* States if @c Target is extrinsically assignable from @c Source.
*
- * Condition: @c true_type if and only if the return expression in the following code
+ * @Condition: @c true_type if and only if the return expression in the following code
* would be well-formed:
+ *
* @code
* assign_to(declval<Target>(), declval<Source>()); }
* @endcode
+ *
* @Requires @c Target and @c Source must be complete types, (possibly cv-qualified) void, or arrays of unknown bound.
*
+ * @Remark
+ * - On compilers supporting SFINAE_EXPR or DECLTYPE the library provided a valid implementation.
+ * - Otherwise, the trait is equivalent to @c boost::conversion::assigner<Target,Source>.
+ *
*/
template <typename Target, typename Source>
struct is_extrinsically_assignable {};
- //! Macro stating if the compiler doesn't support the features needed to define the @c is_extrinsically_assignable type trait for classes.
- #define BOOST_CONVERSION_NO_IS_EXTRINSIC_ASSIGNABLE
+ //! Macro stating if the compiler doesn't support the features needed to define the @c is_extrinsically_assignable type trait.
+ #define BOOST_CONVERSION_NO_IS_EXTRINSIC_ASSIGNABLE
}
}
Modified: sandbox/conversion/boost/conversion/is_extrinsically_convertible.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/is_extrinsically_convertible.hpp (original)
+++ sandbox/conversion/boost/conversion/is_extrinsically_convertible.hpp 2011-08-15 12:47:01 EDT (Mon, 15 Aug 2011)
@@ -21,14 +21,18 @@
/**
* States if @c Source is extrinsically explicit convertible to @c Target.
*
- * Condition: @c true_type if and only if the return expression in the following code
+ * @Condition: @c true_type if and only if the return expression in the following code
* would be well-formed:
+ *
* @code
* Target test() { return implicit_convert_to<Target>(declval<Source>()); }
* @endcode
*
* @Requires @c Target and @c Source must be complete types, (possibly cv-qualified) void, or arrays of unknown bound.
*
+ * @Remark
+ * - On compilers supporting SFINAE_EXPR or DECLTYPE the library provided a valid implementation.
+ * - Otherwise, the trait is equivalent to @c boost::conversion::implicit_converter<Target,Source>.
*/
template <typename Source, typename Target>
struct is_extrinsically_convertible {};
Modified: sandbox/conversion/boost/conversion/is_extrinsically_explicit_convertible.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/is_extrinsically_explicit_convertible.hpp (original)
+++ sandbox/conversion/boost/conversion/is_extrinsically_explicit_convertible.hpp 2011-08-15 12:47:01 EDT (Mon, 15 Aug 2011)
@@ -21,14 +21,18 @@
/**
* States if @c Source is extrinsically explicit convertible to @c Target.
*
- * Condition: @c true_type if and only if the return expression in the following code
+ * @Condition: @c true_type if and only if the return expression in the following code
* would be well-formed:
+ *
* @code
* Target test() { return explicit_convert_to<Target>(declval<Source>()); }
* @endcode
*
* @Requires @c Target and @c Source must be complete types, (possibly cv-qualified) void, or arrays of unknown bound.
*
+ * @Remark
+ * - On compilers supporting SFINAE_EXPR or DECLTYPE the library provided a valid implementation.
+ * - Otherwise, the trait is equivalent to @c boost::conversion::explicit_converter<Target,Source>.
*/
template <class Source, class Target>
struct is_extrinsically_explicit_convertible {};
Modified: sandbox/conversion/boost/conversion/try_assign_to.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/try_assign_to.hpp (original)
+++ sandbox/conversion/boost/conversion/try_assign_to.hpp 2011-08-15 12:47:01 EDT (Mon, 15 Aug 2011)
@@ -7,13 +7,27 @@
// See http://www.boost.org/libs/conversion for documentation.
//
//////////////////////////////////////////////////////////////////////////////
-/*!
- @file
- @brief
- Defines the free function @c try_assign_to and its customization point @c try_assigner.
-
- The function @c try_assign_to assigns the @c from parameter to the @c to parameter. Return @c true if assignment done and @c false otherwise.
-
+/**
+ * @file
+ * @brief
+ * Defines the free function @c try_assign_to and its customization point @c try_assigner.
+ *
+ * The function @c try_assign_to assigns the @c from parameter to the @c to parameter.
+ * Return @c true if assignment done and @c false otherwise.
+ *
+ * The default behavior stores a roll-back value before doing the assignment so the value can be rolled-back if assignment fails
+ * when the @c Source is extrinsically assignable to the @c Target.
+ *
+ * When the default behavior is not satisfactory or doesn't takes care of
+ * specific types, the user could customize the behavior of
+ * @c try_assign_to in two ways:
+ *
+ * - overload the @c try_assign_to on any namespace found by ADL from the
+ * @c Source or the @c Target.
+ * - partially specialize the @c boost::conversion::try_assigner_cp struct.
+ *
+ * @note As we can not add new functions on the @c std namespace, partial
+ * specialization is the only option in these cases.
*/
#ifndef BOOST_CONVERSION_TRY_ASSIGN_TO_HPP
Modified: sandbox/conversion/boost/conversion/try_convert_to.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/try_convert_to.hpp (original)
+++ sandbox/conversion/boost/conversion/try_convert_to.hpp 2011-08-15 12:47:01 EDT (Mon, 15 Aug 2011)
@@ -7,12 +7,28 @@
// See http://www.boost.org/libs/conversion for documentation.
//
//////////////////////////////////////////////////////////////////////////////
-/*!
- @file
- @brief
- Defines the free function @c try_convert_to and its customization point @c try_converter.
-
- The @c try_convert_to function converts the @c from parameter to a @c Target type and returns an optional<Target>, uninitialized if conversion fails.
+/**
+ * @file
+ * @brief
+ * Defines the free function @c try_convert_to and its customization point @c try_converter.
+ *
+ * The @c try_convert_to function converts the @c from parameter to a @c Target type and returns an optional<Target>,
+ * uninitialized if conversion fails.
+ *
+ * The default behavior return a make_optional of the conversion when the @c Source is extrinsically explicit convertible to the @c Target.
+ * A try_catch is used to protect from exceptions, and return an uninitialized optional if conversion fails.
+ *
+ * When the default behavior is not satisfactory or doesn't takes care of
+ * specific types, the user could customize the behavior of
+ * @c try_convert_to in two ways:
+ *
+ * - overload the @c try_assign_to on any namespace found by ADL from the
+ * @c Source or the @c Target. A trick is used to overload on the return type
+ * by adding a dummy parameter depending on the @c Target.
+ * - partially specialize the @c boost::conversion::try_converter_cp struct.
+ *
+ * @note As we can not add new functions on the @c std namespace, partial
+ * specialization is the only option in these cases.
*/
Modified: sandbox/conversion/boost/conversion/type_traits/is_assignable.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/type_traits/is_assignable.hpp (original)
+++ sandbox/conversion/boost/conversion/type_traits/is_assignable.hpp 2011-08-15 12:47:01 EDT (Mon, 15 Aug 2011)
@@ -21,15 +21,27 @@
/**
* States if the @c Target is assignable from the @c Source.
*
- * Condition: @c true_type if <c>declval<Target>() = declval<Source>()</c> is well-formed when treated as an
+ * @Condition: @c true_type if <c>declval<Target>() = declval<Source>()</c> is well-formed when treated as an
* unevaluated operand.
*
* @Requires @c Target and @c Source must be complete types, (possibly cv-qualified) void, or arrays of unknown bound.
+ *
+ * @Remark
+ * - On compilers providing an intrinsic for this trait, the intrinsic will be used.
+ * - On C++0x mode, @c std::is_assignable will be used when available.
+ * - On compilers supporting SFINAE_EXPR or DECLTYPE the library provided a valid implementation.
+ * - Otherwise,
+ * - the library will provide specialization for the builtin types in this file,
+ * - the library will provide specialization for specific standard types in the associated @c type_traits/std/file.hpp
+ * - the library will provide specialization for specific boost types in the associated @c type_traits/boost/file.hpp
+ * - the user will need to provide other specific specializations.
*/
template < typename Target, typename Source>
struct is_assignable
{};
- //! Macro stating if the compiler don't support the features needed to define the @c is_assignable type trait.
+
+ //! Macro stating if the compiler doesn't support the features needed to provide a valid implementation of @c is_assignable type trait.
+ //! In this case the user needs to provide specific specializations.
#define BOOST_CONVERSION_NO_IS_ASSIGNABLE
}
#else
@@ -51,21 +63,20 @@
#endif
#if defined(BOOST_IS_ASSIGNABLE)
-#define BOOST_CONVERSION_IS_ASSIGNABLE_USES_INTRINSICS
+ #define BOOST_CONVERSION_IS_ASSIGNABLE_USES_INTRINSICS
#elif ! defined(BOOST_NO_DECLTYPE)
#if defined _MSC_VER
#define BOOST_CONVERSION_NO_IS_ASSIGNABLE
#elif defined __clang__
//#define BOOST_CONVERSION_IS_ASSIGNABLE_USES_DECLTYPE
#define BOOST_CONVERSION_IS_ASSIGNABLE_USES_SIZEOF
- //#define BOOST_CONVERSION_NO_IS_ASSIGNABLE
#elif defined __GNUC__
#if __GNUC__ < 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ < 4 )
-#if ! defined BOOST_NO_SFINAE_EXPR
-#define BOOST_CONVERSION_IS_ASSIGNABLE_USES_SIZEOF
-#else
-#define BOOST_CONVERSION_NO_IS_ASSIGNABLE
-#endif
+ #if ! defined BOOST_NO_SFINAE_EXPR
+ #define BOOST_CONVERSION_IS_ASSIGNABLE_USES_SIZEOF
+ #else
+ #define BOOST_CONVERSION_NO_IS_ASSIGNABLE
+ #endif
#else
#define BOOST_CONVERSION_IS_ASSIGNABLE_USES_DECLTYPE
#endif
@@ -128,6 +139,7 @@
, true_type()))
#if 1
selector(int);
+ // I don't know why the following code doesn't works.
#elif defined BOOST_CONVERSION_TT_IS_ASSIGNABLE_USES_RVALUE
selector(T1&&, S1&&);
#else
@@ -137,11 +149,13 @@
static false_type
#if 1
selector(...);
+ // I don't know why the following code doesn't works.
#elif defined BOOST_CONVERSION_TT_IS_ASSIGNABLE_USES_RVALUE
selector(any, S1&&);
#else
selector(any, S1&);
#endif
+ // I don't know why the following code doesn't works.
//static const bool value =
// sizeof(selector<T,S>(0)) ==
// sizeof(yes_type);
@@ -149,6 +163,7 @@
#if 1
typedef decltype(selector<T,S>(0)) type;
#else
+ // I don't know why the following code doesn't works.
typedef decltype(selector(declval<T>(), declval<S>())) type;
#endif
};
Modified: sandbox/conversion/boost/conversion/type_traits/is_constructible.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/type_traits/is_constructible.hpp (original)
+++ sandbox/conversion/boost/conversion/type_traits/is_constructible.hpp 2011-08-15 12:47:01 EDT (Mon, 15 Aug 2011)
@@ -22,7 +22,7 @@
/**
* States if @c T is constructible from @c Args.
*
- * Condition: @c true_type if and only if the following variable definition would be well-formed for
+ * @Condition: @c true_type if and only if the following variable definition would be well-formed for
* some invented variable t:
*
* @code
@@ -30,6 +30,17 @@
* @endcode
*
* @Requires @c T and all types in the parameter pack @c Args must be complete types, (possibly cv-qualified) void, or arrays of unknown bound.
+ *
+ * @Remark
+ * - On compilers providing an intrinsic for this trait, the intrinsic will be used.
+ * - On C++0x mode, @c std::is_constructible will be used when available.
+ * - On compilers supporting SFINAE_EXPR or DECLTYPE the library provided a valid implementation.
+ * - Otherwise,
+ * - the library will provide specialization for the builtin types in this file,
+ * - the library will provide specialization for specific standard types in the associated @c type_traits/std/file.hpp
+ * - the library will provide specialization for specific boost types in the associated @c type_traits/boost/file.hpp
+ * - the user will need to provide other specific specializations.
+ *
*/
template < typename T, typename... Args>
struct is_constructible
@@ -75,12 +86,8 @@
#if ! defined BOOST_NO_DECLTYPE
#if defined _MSC_VER
- #if ! defined BOOST_NO_SFINAE_EXPR
- #define BOOST_CONVERSION_IS_CONSTRUCTIBLE_USES_SIZEOF
- #else
#define BOOST_CONVERSION_NO_IS_CONSTRUCTIBLE
#define BOOST_CONVERSION_NO_IS_DEFAULT_CONSTRUCTIBLE
- #endif
#elif defined __clang__
#define BOOST_CONVERSION_IS_CONSTRUCTIBLE_USES_DECLTYPE
#elif defined __GNUC__
Modified: sandbox/conversion/boost/conversion/type_traits/is_copy_assignable.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/type_traits/is_copy_assignable.hpp (original)
+++ sandbox/conversion/boost/conversion/type_traits/is_copy_assignable.hpp 2011-08-15 12:47:01 EDT (Mon, 15 Aug 2011)
@@ -25,7 +25,7 @@
/**
* States if @c T is copy assignable.
*
- * Condition: <c>is_assignable<T&, T const&>::value</c> is @c true.
+ * @Condition: <c>is_assignable<T&, T const&>::value</c> is @c true.
*
* @Requires @c T must be a complete type, (possibly cv-qualified) void, or an array of unknown bound.
*/
Modified: sandbox/conversion/boost/conversion/type_traits/is_copy_constructible.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/type_traits/is_copy_constructible.hpp (original)
+++ sandbox/conversion/boost/conversion/type_traits/is_copy_constructible.hpp 2011-08-15 12:47:01 EDT (Mon, 15 Aug 2011)
@@ -26,7 +26,7 @@
/**
* States if @c T is copy constructible.
*
- * Condition: <c>is_constructible<T, T const&>::value</c> is @c true.
+ * @Condition: <c>is_constructible<T, T const&>::value</c> is @c true.
*
* @Requires @c T must be a complete type, (possibly cv-qualified) void, or an array of unknown bound.
*/
Modified: sandbox/conversion/boost/conversion/type_traits/is_default_constructible.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/type_traits/is_default_constructible.hpp (original)
+++ sandbox/conversion/boost/conversion/type_traits/is_default_constructible.hpp 2011-08-15 12:47:01 EDT (Mon, 15 Aug 2011)
@@ -26,9 +26,12 @@
/**
* States if @c T is default constructible.
*
- * Condition: <c>is_constructible<T>::value</c> is @c true.
+ * @Condition: <c>is_constructible<T>::value</c> is @c true.
*
* @Requires @c T must be a complete type, (possibly cv-qualified) void, or an array of unknown bound.
+ *
+ * @Remark
+ * - @see BOOST_CONVERSION_NO_IS_DEFAULT_CONSTRUCTIBLE
*/
template <typename T>
struct is_default_constructible : is_constructible<
Modified: sandbox/conversion/boost/conversion/type_traits/is_destructible.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/type_traits/is_destructible.hpp (original)
+++ sandbox/conversion/boost/conversion/type_traits/is_destructible.hpp 2011-08-15 12:47:01 EDT (Mon, 15 Aug 2011)
@@ -20,7 +20,7 @@
/**
* States if @c T is destructible.
*
- * Condition: @c true_type if and only if given:
+ * @Condition: @c true_type if and only if given:
*
* @code
* template <typename U>
@@ -38,6 +38,16 @@
* is well formed;
*
* @Requires @c T must be a complete type, (possibly cv-qualified) void, or an array of unknown bound.
+ *
+ * @Remark
+ * - On compilers providing an intrinsic for this trait, the intrinsic will be used.
+ * - On C++0x mode, @c std::is_destructible will be used when available.
+ * - On compilers supporting SFINAE_EXPR or DECLTYPE the library provided a valid implementation.
+ * - Otherwise,
+ * - the library will provide specialization for the builtin types in this file,
+ * - the library will provide specialization for specific standard types in the associated @c type_traits/std/file.hpp
+ * - the library will provide specialization for specific boost types in the associated @c type_traits/boost/file.hpp
+ * - the user will need to provide other specific specializations.
*/
template <typename T>
struct is_destructible
@@ -63,11 +73,7 @@
#if ! defined BOOST_NO_DECLTYPE
#if defined _MSC_VER
- #if ! defined BOOST_NO_SFINAE_EXPR
- #define BOOST_CONVERSION_IS_DESTRUCTIBLE_USES_SIZEOF
- #else
#define BOOST_CONVERSION_NO_IS_DESTRUCTIBLE
- #endif
#elif defined __clang__
#define BOOST_CONVERSION_IS_DESTRUCTIBLE_USES_DECLTYPE
#elif defined __GNUC__
Modified: sandbox/conversion/boost/conversion/type_traits/is_explicitly_convertible.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/type_traits/is_explicitly_convertible.hpp (original)
+++ sandbox/conversion/boost/conversion/type_traits/is_explicitly_convertible.hpp 2011-08-15 12:47:01 EDT (Mon, 15 Aug 2011)
@@ -22,7 +22,7 @@
/**
* States if @c Source is is explicitly convertible to @c Target.
*
- * Condition: @c true_type if and only if the following would be well-formed for
+ * @Condition: @c true_type if and only if the following would be well-formed for
* some invented function test:
*
* @code
@@ -34,8 +34,13 @@
* @Requires @c Source and @c Target must be complete types, (possibly cv-qualified) void, or arrays of unknown bound.
* @Remark @c is_explicitly_convertible has been removed from the C++0x proposal since
* <b>N3047 - Fixing is_constructible and is_explicitly_convertible</b>
- * was accepted. The library provides the @c static_cast version when the compiler supports the needed features,
- * otherwise it relies on the @c is_constructible version.
+ * was accepted.
+ *
+ * @Remark
+ * - On compilers providing an intrinsic for this trait, the intrinsic will be used.
+ * - On C++0x mode, @c std::is_assignable will be used when available.
+ * - On compilers supporting SFINAE_EXPR or DECLTYPE the library provided a valid implementation using the @c static_cast version
+ * - Otherwise it relies on the @c is_constructible version.
*/
template < typename Source, typename Target>
struct is_explicitly_convertible
Modified: sandbox/conversion/boost/conversion/type_traits/is_move_assignable.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/type_traits/is_move_assignable.hpp (original)
+++ sandbox/conversion/boost/conversion/type_traits/is_move_assignable.hpp 2011-08-15 12:47:01 EDT (Mon, 15 Aug 2011)
@@ -24,7 +24,7 @@
#include <boost/type_traits/remove_reference.hpp>
#include <boost/type_traits/add_lvalue_reference.hpp>
-#if ! defined BOOST_NO_RVALUE_REFERENCES
+#if ! defined BOOST_NO_RVALUE_REFERENCES && ! defined BOOST_CONVERSION_DOXYGEN_INVOKED
#if defined _MSC_VER
#elif defined __clang__
#define BOOST_CONVERSION_TT_IS_MOVE_ASSIGNABLE_USES_RVALUE
@@ -45,9 +45,16 @@
/**
* States if @c T is move assignable.
*
- * Condition: <c>is_assignable<T&, T&&>::value</c> is @c true.
+ * @Condition: <c>is_assignable<T&, T&&>::value</c> is @c true.
*
* @Requires @c T must be a complete type, (possibly cv-qualified) void, or an array of unknown bound.
+ *
+ * @Remark
+ * - On compilers providing an intrinsic for this trait, the intrinsic will be used.
+ * - On C++0x mode, @c std::is_move_assignable will be used when available.
+ * - On compilers supporting RVALUE_REFERENCES the trait is equivalent to <c>is_assignable<T&, T&&></c>.
+ * - Otherwise, <c>is_copy_assignable<T></c>.
+ *
*/
template <typename T>
struct is_move_assignable :
Modified: sandbox/conversion/boost/conversion/type_traits/is_move_constructible.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/type_traits/is_move_constructible.hpp (original)
+++ sandbox/conversion/boost/conversion/type_traits/is_move_constructible.hpp 2011-08-15 12:47:01 EDT (Mon, 15 Aug 2011)
@@ -25,7 +25,7 @@
#include <boost/type_traits/add_rvalue_reference.hpp>
#include <boost/type_traits/integral_constant.hpp>
-#if ! defined BOOST_NO_RVALUE_REFERENCES
+#if ! defined BOOST_NO_RVALUE_REFERENCES && ! defined BOOST_CONVERSION_DOXYGEN_INVOKED
#if defined _MSC_VER
#elif defined __clang__
#define BOOST_CONVERSION_TT_IS_MOVE_CONSTRUCTIBLE_USES_RVALUE
@@ -45,9 +45,15 @@
/**
* States if @c T is move constructible.
*
- * Condition: <c>is_constructible<T, T&&>::value</c> is @c true.
+ * @Condition: <c>is_constructible<T, T&&>::value</c> is @c true.
*
* @Requires @c T must be a complete type, (possibly cv-qualified) void, or an array of unknown bound.
+ *
+ * @Remark
+ * - On compilers providing an intrinsic for this trait, the intrinsic will be used.
+ * - On C++0x mode, @c std::is_move_constructible will be used when available.
+ * - On compilers supporting RVALUE_REFERENCES the trait is equivalent to <c>is_assignable<T&, T&&></c>.
+ *
*/
template <typename T>
struct is_move_constructible :
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk