1
0
Fork 0
mirror of https://github.com/bolero-MURAKAMI/Sprout synced 2024-11-12 21:09:01 +00:00

fix swallow

This commit is contained in:
bolero-MURAKAMI 2018-05-29 22:57:25 +09:00
parent 10e239f933
commit 91b37d8f7f
2 changed files with 41 additions and 3 deletions

View file

@ -297,7 +297,7 @@ namespace sprout {
SPROUT_CXX14_CONSTEXPR void SPROUT_CXX14_CONSTEXPR void
assign_impl(Tuple&& t, sprout::index_tuple<Indexes...>) { assign_impl(Tuple&& t, sprout::index_tuple<Indexes...>) {
typedef typename std::decay<Tuple>::type type; typedef typename std::decay<Tuple>::type type;
sprout::swallow({(base_type::template get<Indexes>(*this) = sprout::move(type::template get<Indexes>(SPROUT_FORWARD(Tuple, t))), 0)...}); sprout::swallow({((base_type::template get<Indexes>(*this) = sprout::move(type::template get<Indexes>(SPROUT_FORWARD(Tuple, t)))), 0)...});
} }
template<sprout::index_t... Indexes> template<sprout::index_t... Indexes>
SPROUT_CONSTEXPR std::tuple<Types...> SPROUT_CONSTEXPR std::tuple<Types...>

View file

@ -13,11 +13,49 @@
namespace sprout { namespace sprout {
// //
// swallow_t
// swallow // swallow
// //
// example:
// swallow({(void)pack, 0}...);
// ((void)pack, ..., swallow); // right fold, since C++17
// (swallow, ..., (void)pack); // left fold, since C++17
//
struct swallow_t {
public:
template<typename T> template<typename T>
inline SPROUT_CXX14_CONSTEXPR void inline SPROUT_CXX14_CONSTEXPR void
swallow(std::initializer_list<T>) SPROUT_NOEXCEPT {} operator()(std::initializer_list<T>) const SPROUT_NOEXCEPT {}
};
namespace {
SPROUT_STATIC_CONSTEXPR sprout::swallow_t swallow = {};
} // anonymous-namespace
template<typename T>
inline SPROUT_CONSTEXPR sprout::swallow_t
operator,(sprout::swallow_t, T&&) SPROUT_NOEXCEPT {
return sprout::swallow;
}
template<typename T>
inline SPROUT_CONSTEXPR sprout::swallow_t
operator,(T&&, sprout::swallow_t) SPROUT_NOEXCEPT {
return sprout::swallow;
}
//
// unused_t
// unused
//
struct unused_t {
public:
template<typename... Args>
SPROUT_CONSTEXPR sprout::unused_t const&
operator()(Args&&...) const SPROUT_NOEXCEPT {
return *this;
}
};
namespace {
SPROUT_STATIC_CONSTEXPR sprout::unused_t unused = {};
} // anonymous-namespace
} // namespace sprout } // namespace sprout
#endif // #ifndef SPROUT_UTILITY_SWALLOW_HPP #endif // #ifndef SPROUT_UTILITY_SWALLOW_HPP