////////////////////////////////////////////////////////////////////////////// | |
// | |
// (C) Copyright Ion Gaztanaga 2008-2009. Distributed under the Boost | |
// Software License, Version 1.0. (See accompanying file | |
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | |
// | |
// See http://www.boost.org/libs/container for documentation. | |
// | |
////////////////////////////////////////////////////////////////////////////// | |
#ifndef BOOST_CONTAINERS_DETAIL_STORED_REF_HPP | |
#define BOOST_CONTAINERS_DETAIL_STORED_REF_HPP | |
#include "config_begin.hpp" | |
#include INCLUDE_BOOST_CONTAINER_DETAIL_WORKAROUND_HPP | |
#ifndef BOOST_NO_RVALUE_REFERENCES | |
namespace boost{ | |
namespace container{ | |
namespace containers_detail{ | |
template<class T> | |
struct stored_ref | |
{ | |
static T && forward(T &t) | |
#ifdef BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES | |
{ return t; } | |
#else | |
{ return BOOST_CONTAINER_MOVE_NAMESPACE::move(t); } | |
#endif | |
}; | |
template<class T> | |
struct stored_ref<const T> | |
{ | |
static const T && forward(const T &t) | |
#ifdef BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES | |
{ return t; } | |
#else | |
{ return static_cast<const T&&>(t); } | |
#endif | |
}; | |
template<class T> | |
struct stored_ref<T&&> | |
{ | |
static T && forward(T &t) | |
#ifdef BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES | |
{ return t; } | |
#else | |
{ return BOOST_CONTAINER_MOVE_NAMESPACE::move(t); } | |
#endif | |
}; | |
template<class T> | |
struct stored_ref<const T&&> | |
{ | |
static const T && forward(const T &t) | |
#ifdef BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES | |
{ return t; } | |
#else | |
{ return static_cast<const T &&>(t); } | |
#endif | |
}; | |
template<class T> | |
struct stored_ref<const T&> | |
{ | |
static const T & forward(const T &t) | |
{ return t; } | |
}; | |
template<class T> | |
struct stored_ref<T&> | |
{ | |
static T & forward(T &t) | |
{ return t; } | |
}; | |
} //namespace containers_detail{ | |
} //namespace container{ | |
} //namespace boost{ | |
#else | |
#error "This header can be included only for compiler with rvalue references" | |
#endif //BOOST_NO_RVALUE_REFERENCES | |
#include INCLUDE_BOOST_CONTAINER_DETAIL_CONFIG_END_HPP | |
#endif //BOOST_CONTAINERS_DETAIL_STORED_REF_HPP |