Przeglądaj źródła

More robust DDS_TL in MSVC

default_compile_flags
vector-of-bool 5 lat temu
rodzic
commit
2c7f8a3ec7
1 zmienionych plików z 14 dodań i 7 usunięć
  1. +14
    -7
      src/dds/util/tl.hpp

+ 14
- 7
src/dds/util/tl.hpp Wyświetl plik

@@ -11,7 +11,10 @@ template <std::size_t I,
typename B = std::nullptr_t,
typename C = std::nullptr_t,
typename D = std::nullptr_t>
decltype(auto) nth_arg(A&& a = nullptr, B&& b = nullptr, C&& c = nullptr, D&& d = nullptr) {
decltype(auto) nth_arg(A&& a[[maybe_unused]] = nullptr,
B&& b[[maybe_unused]] = nullptr,
C&& c[[maybe_unused]] = nullptr,
D&& d[[maybe_unused]] = nullptr) {
if constexpr (I == 0) {
return (A &&) a;
} else if constexpr (I == 1) {
@@ -27,12 +30,16 @@ decltype(auto) nth_arg(A&& a = nullptr, B&& b = nullptr, C&& c = nullptr, D&& d

// Based on https://github.com/Quincunx271/TerseLambda
#define DDS_CTL(...) \
(auto&&... _args_)->auto { \
[[maybe_unused]] auto&& _1 = ::dds::detail::nth_arg<0>((decltype(_args_)&&)(_args_)...); \
[[maybe_unused]] auto&& _2 = ::dds::detail::nth_arg<1>((decltype(_args_)&&)(_args_)...); \
[[maybe_unused]] auto&& _3 = ::dds::detail::nth_arg<2>((decltype(_args_)&&)(_args_)...); \
[[maybe_unused]] auto&& _4 = ::dds::detail::nth_arg<3>((decltype(_args_)&&)(_args_)...); \
static_assert(sizeof...(_args_) <= 4); \
(auto&&... tl_args)->auto { \
[[maybe_unused]] auto&& _1 = ::dds::detail::nth_arg<0, decltype(tl_args)...>( \
static_cast<decltype(tl_args)&&>(tl_args)...); \
[[maybe_unused]] auto&& _2 = ::dds::detail::nth_arg<1, decltype(tl_args)...>( \
static_cast<decltype(tl_args)&&>(tl_args)...); \
[[maybe_unused]] auto&& _3 = ::dds::detail::nth_arg<2, decltype(tl_args)...>( \
static_cast<decltype(tl_args)&&>(tl_args)...); \
[[maybe_unused]] auto&& _4 = ::dds::detail::nth_arg<3, decltype(tl_args)...>( \
static_cast<decltype(tl_args)&&>(tl_args)...); \
static_assert(sizeof...(tl_args) <= 4); \
return (__VA_ARGS__); \
}


Ładowanie…
Anuluj
Zapisz