epoc32/include/stdapis/boost/variant/detail/has_nothrow_move.hpp
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:27:01 +0100
branchSymbian2
changeset 3 e1b950c65cb4
permissions -rw-r--r--
Attempt to represent the S^2->S^3 header reorganisation as a series of "hg rename" operations
williamr@2
     1
williamr@2
     2
// (C) Copyright Eric Friedman 2002-2003.
williamr@2
     3
// Distributed under the Boost Software License, Version 1.0. (See
williamr@2
     4
// accompanying file LICENSE_1_0.txt or copy at
williamr@2
     5
// http://www.boost.org/LICENSE_1_0.txt)
williamr@2
     6
//
williamr@2
     7
// See http://www.boost.org for most recent version including documentation.
williamr@2
     8
williamr@2
     9
#ifndef BOOST_VARIANT_DETAIL_HAS_NOTHROW_MOVE_HPP_INCLUDED
williamr@2
    10
#define BOOST_VARIANT_DETAIL_HAS_NOTHROW_MOVE_HPP_INCLUDED
williamr@2
    11
williamr@2
    12
#include "boost/config.hpp" // for STATIC_CONSTANT
williamr@2
    13
#include "boost/variant/detail/has_trivial_move.hpp"
williamr@2
    14
#include "boost/type_traits/has_nothrow_copy.hpp"
williamr@2
    15
#include "boost/type_traits/has_nothrow_assign.hpp"
williamr@2
    16
williamr@2
    17
#include "boost/mpl/and.hpp"
williamr@2
    18
#include "boost/mpl/or.hpp"
williamr@2
    19
williamr@2
    20
// should be the last #include
williamr@2
    21
#include "boost/variant/detail/bool_trait_def.hpp"
williamr@2
    22
williamr@2
    23
namespace boost {
williamr@2
    24
namespace detail { namespace variant {
williamr@2
    25
williamr@2
    26
// TRAIT: has_nothrow_move
williamr@2
    27
williamr@2
    28
template <typename T>
williamr@2
    29
struct has_nothrow_move_impl
williamr@2
    30
{
williamr@2
    31
    BOOST_STATIC_CONSTANT(
williamr@2
    32
        bool, value = (
williamr@2
    33
            ::boost::mpl::or_<
williamr@2
    34
                has_trivial_move<T>
williamr@2
    35
              , ::boost::mpl::and_<
williamr@2
    36
                  has_nothrow_copy<T>
williamr@2
    37
                , has_nothrow_assign<T>
williamr@2
    38
                >
williamr@2
    39
            >::type::value
williamr@2
    40
            )
williamr@2
    41
        );
williamr@2
    42
};
williamr@2
    43
williamr@2
    44
BOOST_VARIANT_TT_AUX_BOOL_TRAIT_DEF1(
williamr@2
    45
      has_nothrow_move
williamr@2
    46
    , T
williamr@2
    47
    , (::boost::detail::variant::has_nothrow_move_impl<T>::value)
williamr@2
    48
    )
williamr@2
    49
williamr@2
    50
williamr@2
    51
// TRAIT: has_nothrow_move_constructor
williamr@2
    52
williamr@2
    53
template <typename T>
williamr@2
    54
struct has_nothrow_move_constructor_impl
williamr@2
    55
{
williamr@2
    56
    BOOST_STATIC_CONSTANT(
williamr@2
    57
        bool, value = (
williamr@2
    58
            ::boost::mpl::or_<
williamr@2
    59
              has_nothrow_move<T>
williamr@2
    60
            , has_trivial_move_constructor<T>
williamr@2
    61
            , has_nothrow_copy<T>
williamr@2
    62
            >::type::value
williamr@2
    63
            )
williamr@2
    64
        );
williamr@2
    65
};
williamr@2
    66
williamr@2
    67
BOOST_VARIANT_TT_AUX_BOOL_TRAIT_DEF1(
williamr@2
    68
      has_nothrow_move_constructor
williamr@2
    69
    , T
williamr@2
    70
    , (::boost::detail::variant::has_nothrow_move_constructor_impl<T>::value)
williamr@2
    71
    )
williamr@2
    72
williamr@2
    73
williamr@2
    74
// TRAIT: has_nothrow_move_assign
williamr@2
    75
williamr@2
    76
template <typename T>
williamr@2
    77
struct has_nothrow_move_assign_impl
williamr@2
    78
{
williamr@2
    79
    BOOST_STATIC_CONSTANT(
williamr@2
    80
        bool, value = (
williamr@2
    81
            ::boost::mpl::or_<
williamr@2
    82
              has_nothrow_move<T>
williamr@2
    83
            , has_trivial_move_assign<T>
williamr@2
    84
            , has_nothrow_assign<T>
williamr@2
    85
            >::type::value
williamr@2
    86
            )
williamr@2
    87
        );
williamr@2
    88
};
williamr@2
    89
williamr@2
    90
BOOST_VARIANT_TT_AUX_BOOL_TRAIT_DEF1(
williamr@2
    91
      has_nothrow_move_assign
williamr@2
    92
    , T
williamr@2
    93
    , (::boost::detail::variant::has_nothrow_move_assign_impl<T>::value)
williamr@2
    94
    )
williamr@2
    95
williamr@2
    96
}} // namespace detail::variant
williamr@2
    97
williamr@2
    98
BOOST_VARIANT_TT_AUX_TRAIT_SUFFIX(1,::boost::detail::variant::has_nothrow_move)
williamr@2
    99
BOOST_VARIANT_TT_AUX_TRAIT_SUFFIX(1,::boost::detail::variant::has_nothrow_move_constructor)
williamr@2
   100
BOOST_VARIANT_TT_AUX_TRAIT_SUFFIX(1,::boost::detail::variant::has_nothrow_move_assign)
williamr@2
   101
williamr@2
   102
} // namespace boost
williamr@2
   103
williamr@2
   104
#include "boost/variant/detail/bool_trait_undef.hpp"
williamr@2
   105
williamr@2
   106
#endif // BOOST_VARIANT_DETAIL_HAS_NOTHROW_MOVE_HPP_INCLUDED