/*============================================================================= Copyright (c) 2011-2014 Bolero MURAKAMI https://github.com/bolero-MURAKAMI/Sprout 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) =============================================================================*/ #ifndef SPROUT_UTILITY_FORWARD_HPP #define SPROUT_UTILITY_FORWARD_HPP #include #include namespace sprout { // // forward // template inline SPROUT_CONSTEXPR T&& forward(typename std::remove_reference::type& t) SPROUT_NOEXCEPT { return static_cast(t); } template inline SPROUT_CONSTEXPR T&& forward(typename std::remove_reference::type&&) SPROUT_NOEXCEPT SPROUT_DELETED_FUNCTION_DECL } // namespace sprout // // SPROUT_FORWARD // #if defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || defined(__ECC) # define SPROUT_FORWARD(TYPE, VAR) \ static_cast(VAR))>(VAR) #else # define SPROUT_FORWARD(TYPE, VAR) \ ::sprout::forward(VAR) #endif // // SPROUT_AUTO_FORWARD // #define SPROUT_AUTO_FORWARD(VAR) SPROUT_FORWARD(decltype(VAR), VAR) #endif // #ifndef SPROUT_UTILITY_FORWARD_HPP