Concept Subspace :: sus :: construct :: From
template <class ToType, class FromType>concept From
requires
requires(FromType&& from) {
{ ToType::from(::sus::forward<FromType>(from)) } -> std::same_as<ToType>;
}
A concept that indicates ToType
can be constructed from a FromType
, via
ToType::from(FromType)
.
This concept is rarely used directly, instead prefer to use the
sus::construct::Into
concept, as it also supports identity
transformations.
When a type is From<T, O>
, it is also Into<O, T>
. Then a variable o
of
type O
can be explicitly converted to T
, with type deduction, via
sus::into(o)
.
It is only possible to satisfy this concept for ToType
that is not a
reference, as it needs to be able to construct ToType
.
Arrays
It's possible to convert from an array, in which case From<T, O(&)[]>
is
satisfied. To do so, implement from()
as a templated method,
with a size_t
template parameter for the size of the incoming array. For
example:
// sus::construct::From<Slice<T>, O[]> trait.
template <size_t N>
static constexpr inline Slice from(T (&data)[N]) {
return Slice(data, N);
}