mirror of
https://github.com/bolero-MURAKAMI/Sprout.git
synced 2024-11-14 10:39:05 +00:00
add SPROUT_FORWARD variadic version
This commit is contained in:
parent
ab875e84de
commit
23f24450b0
2 changed files with 20 additions and 7 deletions
|
@ -10,8 +10,8 @@
|
||||||
|
|
||||||
#include <sprout/config.hpp>
|
#include <sprout/config.hpp>
|
||||||
#include <sprout/preprocessor/config.hpp>
|
#include <sprout/preprocessor/config.hpp>
|
||||||
#include <sprout/preprocessor/cat.hpp>
|
|
||||||
#include <sprout/preprocessor/stringize.hpp>
|
#include <sprout/preprocessor/stringize.hpp>
|
||||||
|
#include <sprout/preprocessor/cat.hpp>
|
||||||
#include <sprout/preprocessor/variadic/size.hpp>
|
#include <sprout/preprocessor/variadic/size.hpp>
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
@ -10,6 +10,9 @@
|
||||||
|
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
#include <sprout/config.hpp>
|
#include <sprout/config.hpp>
|
||||||
|
#include <sprout/preprocessor/config.hpp>
|
||||||
|
#include <sprout/preprocessor/cat.hpp>
|
||||||
|
#include <sprout/preprocessor/variadic/size.hpp>
|
||||||
|
|
||||||
namespace sprout {
|
namespace sprout {
|
||||||
//
|
//
|
||||||
|
@ -25,20 +28,30 @@ namespace sprout {
|
||||||
forward(typename std::remove_reference<T>::type&&) SPROUT_NOEXCEPT SPROUT_DELETED_FUNCTION_DECL
|
forward(typename std::remove_reference<T>::type&&) SPROUT_NOEXCEPT SPROUT_DELETED_FUNCTION_DECL
|
||||||
} // namespace sprout
|
} // namespace sprout
|
||||||
|
|
||||||
//
|
|
||||||
// SPROUT_FORWARD
|
|
||||||
//
|
|
||||||
#if defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || defined(__ECC)
|
#if defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || defined(__ECC)
|
||||||
# define SPROUT_FORWARD(TYPE, VAR) \
|
# define SPROUT_FORWARD_2(TYPE, VAR) \
|
||||||
static_cast<decltype(::sprout::forward<TYPE>(VAR))>(VAR)
|
static_cast<decltype(::sprout::forward<TYPE>(VAR))>(VAR)
|
||||||
#else
|
#else
|
||||||
# define SPROUT_FORWARD(TYPE, VAR) \
|
# define SPROUT_FORWARD_2(TYPE, VAR) \
|
||||||
::sprout::forward<TYPE>(VAR)
|
::sprout::forward<TYPE>(VAR)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//
|
//
|
||||||
// SPROUT_AUTO_FORWARD
|
// SPROUT_AUTO_FORWARD
|
||||||
//
|
//
|
||||||
#define SPROUT_AUTO_FORWARD(VAR) SPROUT_FORWARD(decltype(VAR), VAR)
|
#define SPROUT_AUTO_FORWARD(VAR) SPROUT_FORWARD_2(decltype(VAR), VAR)
|
||||||
|
|
||||||
|
//
|
||||||
|
// SPROUT_FORWARD
|
||||||
|
//
|
||||||
|
#if SPROUT_PP_VARIADICS
|
||||||
|
# define SPROUT_FORWARD_1(VAR) \
|
||||||
|
SPROUT_AUTO_FORWARD(VAR)
|
||||||
|
# define SPROUT_FORWARD(...) \
|
||||||
|
SPROUT_PP_CAT(SPROUT_FORWARD_, SPROUT_PP_VARIADIC_SIZE(__VA_ARGS__))(__VA_ARGS__)
|
||||||
|
#else
|
||||||
|
# define SPROUT_FORWARD(TYPE, VAR) \
|
||||||
|
SPROUT_FORWARD_2(TYPE, VAR)
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif // #ifndef SPROUT_UTILITY_FORWARD_HPP
|
#endif // #ifndef SPROUT_UTILITY_FORWARD_HPP
|
||||||
|
|
Loading…
Reference in a new issue