mirror of
https://github.com/bolero-MURAKAMI/Sprout.git
synced 2024-12-23 21:25:49 +00:00
add conversion to atd classes
This commit is contained in:
parent
5bf0907974
commit
60362f5419
3 changed files with 29 additions and 2 deletions
|
@ -70,7 +70,9 @@ namespace sprout {
|
|||
private:
|
||||
template<sprout::index_t... Indexes>
|
||||
SPROUT_CONSTEXPR std::array<T, N>
|
||||
to_std_array(sprout::index_tuple<Indexes...>) const {
|
||||
to_std_array(sprout::index_tuple<Indexes...>) const
|
||||
SPROUT_NOEXCEPT_IF(sprout::is_nothrow_copy_constructible<typename std::remove_cv<T>::type>::value)
|
||||
{
|
||||
return std::array<T, N>{{elems[Indexes]...}};
|
||||
}
|
||||
public:
|
||||
|
@ -265,7 +267,9 @@ namespace sprout {
|
|||
}
|
||||
#endif
|
||||
|
||||
SPROUT_CONSTEXPR operator std::array<T, N>() const {
|
||||
SPROUT_CONSTEXPR operator std::array<T, N>() const
|
||||
SPROUT_NOEXCEPT_IF(sprout::is_nothrow_copy_constructible<typename std::remove_cv<T>::type>::value)
|
||||
{
|
||||
return to_std_array(sprout::make_index_tuple<N>::make());
|
||||
}
|
||||
};
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include <sprout/utility/pack.hpp>
|
||||
#include <sprout/utility/pair/pair_fwd.hpp>
|
||||
#include <sprout/type_traits/integral_constant.hpp>
|
||||
#include <sprout/type_traits/is_nothrow_copy_constructible.hpp>
|
||||
#include <sprout/type_traits/is_convert_constructible.hpp>
|
||||
#include <sprout/type_traits/enabler_if.hpp>
|
||||
#include <sprout/tpp/algorithm/all_of.hpp>
|
||||
|
@ -298,6 +299,11 @@ namespace sprout {
|
|||
typedef typename std::decay<Tuple>::type type;
|
||||
sprout::eat((sprout::eat(base_type::template get<Indexes>(*this) = sprout::move(type::template get<Indexes>(SPROUT_FORWARD(Tuple, t)))), 0)...);
|
||||
}
|
||||
template<sprout::index_t... Indexes>
|
||||
SPROUT_CONSTEXPR std::tuple<Types...>
|
||||
to_std_tuple(sprout::index_tuple<Indexes...>) {
|
||||
return std::tuple<Types...>(base_type::template get<Indexes>(*this)...);
|
||||
}
|
||||
public:
|
||||
// tuple construction
|
||||
SPROUT_CONSTEXPR tuple()
|
||||
|
@ -462,6 +468,12 @@ namespace sprout {
|
|||
{
|
||||
swap_impl(other, index_tuple_type());
|
||||
}
|
||||
|
||||
SPROUT_EXPLICIT_CONVERSION SPROUT_CONSTEXPR operator std::tuple<Types...>() const
|
||||
SPROUT_NOEXCEPT_IF(sprout::tpp::all_of<sprout::is_nothrow_copy_constructible<Types>...>::value)
|
||||
{
|
||||
return to_std_tuple(index_tuple_type());;
|
||||
}
|
||||
};
|
||||
template<>
|
||||
class tuple<> {
|
||||
|
@ -489,6 +501,10 @@ namespace sprout {
|
|||
SPROUT_CONSTEXPR tuple(sprout::tuples::flexibly_construct_t, sprout::pair<UType1, UType2>&&) SPROUT_NOEXCEPT {}
|
||||
// tuple swap
|
||||
SPROUT_CXX14_CONSTEXPR void swap(tuple&) SPROUT_NOEXCEPT {}
|
||||
|
||||
SPROUT_CONSTEXPR operator std::tuple<>() const SPROUT_NOEXCEPT {
|
||||
return std::tuple<>();;
|
||||
}
|
||||
};
|
||||
|
||||
//
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
#include <type_traits>
|
||||
#include <sprout/config.hpp>
|
||||
#include <sprout/index_tuple/metafunction.hpp>
|
||||
#include <sprout/type_traits/is_nothrow_copy_constructible.hpp>
|
||||
#include <sprout/utility/forward.hpp>
|
||||
#include <sprout/utility/swap.hpp>
|
||||
#include <sprout/utility/pair/pair_fwd.hpp>
|
||||
|
@ -162,6 +163,12 @@ namespace sprout {
|
|||
sprout::swap(first, other.first);
|
||||
sprout::swap(second, other.second);
|
||||
}
|
||||
|
||||
SPROUT_EXPLICIT_CONVERSION SPROUT_CONSTEXPR operator std::pair<T1, T2>() const
|
||||
SPROUT_NOEXCEPT_IF(sprout::is_nothrow_copy_constructible<T1>::value && sprout::is_nothrow_copy_constructible<T2>::value)
|
||||
{
|
||||
return std::pair<T1, T2>(first, second);
|
||||
}
|
||||
};
|
||||
|
||||
//
|
||||
|
|
Loading…
Reference in a new issue