mirror of
https://github.com/bolero-MURAKAMI/Sprout.git
synced 2024-12-23 21:25:49 +00:00
fix tuple constructor
This commit is contained in:
parent
aa4fc785b0
commit
e6bfb69be9
1 changed files with 53 additions and 3 deletions
|
@ -195,8 +195,45 @@ namespace sprout {
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template<bool Cond, typename... Tail>
|
||||||
|
struct and_impl
|
||||||
|
: public std::false_type
|
||||||
|
{};
|
||||||
|
template<typename... Tail>
|
||||||
|
struct and_impl<true, Tail...>
|
||||||
|
: public std::integral_constant<bool, sprout::tuples::detail::and_impl<Tail...>::value>
|
||||||
|
{};
|
||||||
|
|
||||||
|
template<typename Head, typename... Tail>
|
||||||
|
struct and_
|
||||||
|
: public sprout::tuples::detail::and_impl<Head::value, Tail...>
|
||||||
|
{};
|
||||||
} // namespace detail
|
} // namespace detail
|
||||||
|
|
||||||
|
template<typename... Types>
|
||||||
|
class tuple;
|
||||||
|
|
||||||
|
//
|
||||||
|
// is_tuple
|
||||||
|
//
|
||||||
|
template<typename T>
|
||||||
|
struct is_tuple
|
||||||
|
: public std::false_type
|
||||||
|
{};
|
||||||
|
template<typename T>
|
||||||
|
struct is_tuple<T const>
|
||||||
|
: public sprout::tuples::is_tuple<T>
|
||||||
|
{};
|
||||||
|
template<typename T>
|
||||||
|
struct is_tuple<T const volatile>
|
||||||
|
: public sprout::tuples::is_tuple<T>
|
||||||
|
{};
|
||||||
|
template<typename... Types>
|
||||||
|
struct is_tuple<sprout::tuples::tuple<Types...> >
|
||||||
|
: public std::true_type
|
||||||
|
{};
|
||||||
|
|
||||||
//
|
//
|
||||||
// tuple
|
// tuple
|
||||||
//
|
//
|
||||||
|
@ -214,9 +251,22 @@ namespace sprout {
|
||||||
SPROUT_CONSTEXPR explicit tuple(Types const&... elements)
|
SPROUT_CONSTEXPR explicit tuple(Types const&... elements)
|
||||||
: inherited_type(elements...)
|
: inherited_type(elements...)
|
||||||
{}
|
{}
|
||||||
template<typename... UTypes>
|
template<
|
||||||
SPROUT_CONSTEXPR explicit tuple(UTypes&&... elements)
|
typename U,
|
||||||
: inherited_type(sprout::forward<UTypes>(elements)...)
|
typename = typename std::enable_if<
|
||||||
|
!sprout::tuples::is_tuple<typename std::remove_reference<U>::type>::value
|
||||||
|
>::type
|
||||||
|
>
|
||||||
|
SPROUT_CONSTEXPR explicit tuple(U&& elem)
|
||||||
|
: inherited_type(sprout::forward<U>(elem))
|
||||||
|
{}
|
||||||
|
template<
|
||||||
|
typename U1,
|
||||||
|
typename U2,
|
||||||
|
typename... UTypes
|
||||||
|
>
|
||||||
|
SPROUT_CONSTEXPR explicit tuple(U1&& elem1, U2&& elem2, UTypes&&... elements)
|
||||||
|
: inherited_type(sprout::forward<U1>(elem1), sprout::forward<U2>(elem2), sprout::forward<UTypes>(elements)...)
|
||||||
{}
|
{}
|
||||||
SPROUT_CONSTEXPR tuple(tuple const&) = default;
|
SPROUT_CONSTEXPR tuple(tuple const&) = default;
|
||||||
SPROUT_CONSTEXPR tuple(tuple&&) = default;
|
SPROUT_CONSTEXPR tuple(tuple&&) = default;
|
||||||
|
|
Loading…
Reference in a new issue