5 # ifndef VCCC_TYPE_SUPPORT_DETAIL_CONVERT_TO_HPP
6 # define VCCC_TYPE_SUPPORT_DETAIL_CONVERT_TO_HPP
18 template<
typename T,
typename =
void>
19 struct has_size : std::false_type {};
22 struct has_size<T,
void_t<decltype(
std::declval<T&>().
size())>> : std::true_type {};
24 template<
size_t sz,
typename T>
inline bool check_bound(std::true_type,
const T& from) {
return from.size() >= sz; }
25 template<
size_t sz,
typename T>
inline bool check_bound(std::false_type,
const T&) {
return true; }
28 struct tuple_size_or_zero : std::integral_constant<size_t, 0> {};
31 struct tuple_size_or_zero<T, true> : std::tuple_size<T> {};
35 template<
typename R,
typename T, std::size_t... I,
typename IT, IT... I2>
37 fill_rest(
const T& from, std::index_sequence<I...> index_seq, std::integer_sequence<IT, I2...> rest_seq)
39 return R(vccc::at<I, typename R::value_type>(from)..., I2...);
43 template<
typename R,
typename T, std::size_t... I>
45 convert_to_impl(std::true_type,
const T& from, std::index_sequence<I...> index_seq)
48 "Following must be satisfied: from.size() >= tuple_size<R>::value");
52 return fill_rest<R>(from, index_seq, Zeros{});
56 template<
typename R,
typename T, std::size_t... I>
58 convert_to_impl(std::false_type,
const T& from, std::index_sequence<I...>)
60 return {vccc::at<I, typename R::value_type>(from)...};
std::integral_constant< bool, v > bool_constant
Definition: bool_constant.hpp:19
#define ENSURES(expr, msg)
Definition: assert.hpp:23
make_same_sequence< int, 0, N > make_zero_sequence
alias of zero std::size_t sequence
Definition: sequence.hpp:50
Definition: matrix.hpp:495
Definition: directory.h:12
constexpr auto size(const C &c) -> decltype(c.size())
Definition: size.hpp:16
constexpr VCCC_INLINE_OR_STATIC detail::element_niebloid< 1 > value
Definition: key_value.hpp:35