epoc32/include/stdapis/boost/variant/detail/has_trivial_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_TRIVIAL_MOVE_HPP_INCLUDED
williamr@2
    10
#define BOOST_VARIANT_DETAIL_HAS_TRIVIAL_MOVE_HPP_INCLUDED
williamr@2
    11
williamr@2
    12
#include "boost/config.hpp" // for STATIC_CONSTANT
williamr@2
    13
#include "boost/type_traits/has_trivial_copy.hpp"
williamr@2
    14
#include "boost/type_traits/has_trivial_assign.hpp"
williamr@2
    15
williamr@2
    16
#include "boost/mpl/and.hpp"
williamr@2
    17
#include "boost/mpl/or.hpp"
williamr@2
    18
williamr@2
    19
// should be the last #include
williamr@2
    20
#include "boost/variant/detail/bool_trait_def.hpp"
williamr@2
    21
williamr@2
    22
namespace boost {
williamr@2
    23
namespace detail { namespace variant {
williamr@2
    24
williamr@2
    25
// TRAIT: has_trivial_move
williamr@2
    26
williamr@2
    27
template <typename T>
williamr@2
    28
struct has_trivial_move_impl
williamr@2
    29
{
williamr@2
    30
    BOOST_STATIC_CONSTANT(
williamr@2
    31
        bool, value = (
williamr@2
    32
            ::boost::mpl::and_<
williamr@2
    33
              has_trivial_copy<T>
williamr@2
    34
            , has_trivial_assign<T>
williamr@2
    35
            >::type::value
williamr@2
    36
            )
williamr@2
    37
        );
williamr@2
    38
};
williamr@2
    39
williamr@2
    40
BOOST_VARIANT_TT_AUX_BOOL_TRAIT_DEF1(
williamr@2
    41
      has_trivial_move
williamr@2
    42
    , T
williamr@2
    43
    , (::boost::detail::variant::has_trivial_move_impl<T>::value)
williamr@2
    44
    )
williamr@2
    45
williamr@2
    46
williamr@2
    47
// TRAIT: has_trivial_move_constructor
williamr@2
    48
williamr@2
    49
template <typename T>
williamr@2
    50
struct has_trivial_move_constructor_impl
williamr@2
    51
{
williamr@2
    52
    BOOST_STATIC_CONSTANT(
williamr@2
    53
        bool, value = (
williamr@2
    54
            ::boost::mpl::or_<
williamr@2
    55
              has_trivial_move<T>
williamr@2
    56
            , has_trivial_copy<T>
williamr@2
    57
            >::type::value
williamr@2
    58
            )
williamr@2
    59
        );
williamr@2
    60
};
williamr@2
    61
williamr@2
    62
BOOST_VARIANT_TT_AUX_BOOL_TRAIT_DEF1(
williamr@2
    63
      has_trivial_move_constructor
williamr@2
    64
    , T
williamr@2
    65
    , (::boost::detail::variant::has_trivial_move_constructor_impl<T>::value)
williamr@2
    66
    )
williamr@2
    67
williamr@2
    68
williamr@2
    69
// TRAIT: has_trivial_move_assign
williamr@2
    70
williamr@2
    71
template <typename T>
williamr@2
    72
struct has_trivial_move_assign_impl
williamr@2
    73
{
williamr@2
    74
    BOOST_STATIC_CONSTANT(
williamr@2
    75
        bool, value = (
williamr@2
    76
            ::boost::mpl::or_<
williamr@2
    77
              has_trivial_move<T>
williamr@2
    78
            , has_trivial_assign<T>
williamr@2
    79
            >::type::value
williamr@2
    80
            )
williamr@2
    81
        );
williamr@2
    82
};
williamr@2
    83
williamr@2
    84
BOOST_VARIANT_TT_AUX_BOOL_TRAIT_DEF1(
williamr@2
    85
      has_trivial_move_assign
williamr@2
    86
    , T
williamr@2
    87
    , (::boost::detail::variant::has_trivial_move_assign_impl<T>::value)
williamr@2
    88
    )
williamr@2
    89
williamr@2
    90
}} // namespace detail::variant
williamr@2
    91
williamr@2
    92
BOOST_VARIANT_TT_AUX_TRAIT_SUFFIX(1,::boost::detail::variant::has_trivial_move)
williamr@2
    93
BOOST_VARIANT_TT_AUX_TRAIT_SUFFIX(1,::boost::detail::variant::has_trivial_move_constructor)
williamr@2
    94
BOOST_VARIANT_TT_AUX_TRAIT_SUFFIX(1,::boost::detail::variant::has_trivial_move_assign)
williamr@2
    95
williamr@2
    96
} // namespace boost
williamr@2
    97
williamr@2
    98
#include "boost/variant/detail/bool_trait_undef.hpp"
williamr@2
    99
williamr@2
   100
#endif // BOOST_VARIANT_DETAIL_HAS_TRIVIAL_MOVE_HPP_INCLUDED