mp_units::value_cast

value_cast overloads

Synopses

Declared in <mp-units/framework/value_cast.h>

Explicit cast of a quantity's representation

template<
    Quantity ToQ,
    typename FwdQ,
    RoundingPolicy Policy = truncated_t,
    Quantity Q = std::remove_cvref_t<FwdQ>>
requires (ToQ::quantity_spec == Q::quantity_spec) && UnitOf<MP_UNITS_NONCONST_TYPE(ToQ::unit), Q::quantity_spec> &&
          std::constructible_from<typename ToQ::rep, typename Q::rep> &&
          detail::ExplicitlyCastable<Q::unit, ToQ::unit, typename ToQ::rep> &&
          detail::ValidRoundingPolicyFor<Policy, typename Q::rep, typename ToQ::rep>
[[nodiscard]]
constexpr
Quantity auto
value_cast(
    FwdQ&& q,
    Policy policy = Policy{});
» more...

Explicit cast of a quantity's representation type

template<
    typename ToRep,
    typename FwdQ,
    RoundingPolicy Policy = truncated_t,
    Quantity Q = std::remove_cvref_t<FwdQ>>
requires RepresentationOf<ToRep, Q::quantity_spec> && std::constructible_from<ToRep, typename Q::rep> &&
           detail::ValidRoundingPolicyFor<Policy, typename Q::rep, ToRep>
[[nodiscard]]
constexpr
quantity<Q::reference, ToRep>
value_cast(
    FwdQ&& q,
    Policy policy = Policy{});
» more...

Explicit cast of a quantity's unit

template<
    auto ToU,
    typename FwdQ,
    RoundingPolicy Policy = truncated_t,
    Quantity Q = std::remove_cvref_t<FwdQ>>
requires UnitOf<MP_UNITS_REMOVE_CONST(decltype(ToU)), Q::quantity_spec> &&
           detail::ExplicitlyCastable<Q::unit, ToU, typename Q::rep> &&
           detail::ValidRoundingPolicyFor<Policy, typename Q::rep, typename Q::rep>
[[nodiscard]]
constexpr
Quantity auto
value_cast(
    FwdQ&& q,
    Policy policy = Policy{});
» more...

Explicit cast of a quantity point's representation

template<
    Quantity ToQ,
    typename FwdQP,
    RoundingPolicy Policy = truncated_t,
    QuantityPoint QP = std::remove_cvref_t<FwdQP>>
requires (ToQ::quantity_spec == QP::quantity_spec) && UnitOf<MP_UNITS_NONCONST_TYPE(ToQ::unit), QP::quantity_spec> &&
          std::constructible_from<typename ToQ::rep, typename QP::rep> &&
          detail::ExplicitlyCastable<QP::unit, ToQ::unit, typename ToQ::rep> &&
          detail::ValidRoundingPolicyFor<Policy, typename QP::rep, typename ToQ::rep>
[[nodiscard]]
constexpr
QuantityPoint auto
value_cast(
    FwdQP&& qp,
    Policy policy = Policy{});
» more...

Explicit cast of a quantity point's representation, including potentially the point origin

template<
    QuantityPoint ToQP,
    typename FwdQP,
    RoundingPolicy Policy = truncated_t,
    QuantityPoint QP = std::remove_cvref_t<FwdQP>>
requires (ToQP::quantity_spec == QP::quantity_spec) && UnitOf<MP_UNITS_NONCONST_TYPE(ToQP::unit), QP::quantity_spec> &&
          (detail::same_absolute_point_origins(ToQP::point_origin, QP::point_origin)) &&
          std::constructible_from<typename ToQP::rep, typename QP::rep> &&
          detail::ExplicitlyCastable<QP::unit, ToQP::unit, typename ToQP::rep> &&
          detail::ValidRoundingPolicyFor<Policy, typename QP::rep, typename ToQP::rep>
[[nodiscard]]
constexpr
QuantityPoint auto
value_cast(
    FwdQP&& qp,
    Policy policy = Policy{});
» more...

Explicit cast of a quantity point's representation type

template<
    typename ToRep,
    typename FwdQP,
    RoundingPolicy Policy = truncated_t,
    QuantityPoint QP = std::remove_cvref_t<FwdQP>>
requires RepresentationOf<ToRep, QP::quantity_spec> && std::constructible_from<ToRep, typename QP::rep> &&
           detail::ValidRoundingPolicyFor<Policy, typename QP::rep, ToRep>
[[nodiscard]]
constexpr
quantity_point<QP::reference, QP::point_origin, ToRep>
value_cast(
    FwdQP&& qp,
    Policy policy = Policy{});
» more...

Explicit cast of a quantity point's unit

template<
    Unit auto ToU,
    typename FwdQP,
    RoundingPolicy Policy = truncated_t,
    QuantityPoint QP = std::remove_cvref_t<FwdQP>>
requires UnitOf<MP_UNITS_REMOVE_CONST(decltype(ToU)), QP::quantity_spec> &&
           detail::ExplicitlyCastable<QP::unit, ToU, typename QP::rep> &&
           detail::ValidRoundingPolicyFor<Policy, typename QP::rep, typename QP::rep>
[[nodiscard]]
constexpr
QuantityPoint auto
value_cast(
    FwdQP&& qp,
    Policy policy = Policy{});
» more...

Explicit cast of a quantity's representation type and unit

template<
    typename ToRep,
    Unit auto ToU,
    typename FwdQ,
    RoundingPolicy Policy = truncated_t,
    Quantity Q = std::remove_cvref_t<FwdQ>>
requires UnitOf<MP_UNITS_REMOVE_CONST(decltype(ToU)), Q::quantity_spec> &&
           RepresentationOf<ToRep, Q::quantity_spec> && std::constructible_from<ToRep, typename Q::rep> &&
           detail::ExplicitlyCastable<Q::unit, ToU, ToRep> &&
           detail::ValidRoundingPolicyFor<Policy, typename Q::rep, ToRep>
[[nodiscard]]
constexpr
Quantity auto
value_cast(
    FwdQ&& q,
    Policy policy = Policy{});
» more...

Explicit cast of a quantity's unit and representation type

template<
    Unit auto ToU,
    typename ToRep,
    typename FwdQ,
    RoundingPolicy Policy = truncated_t,
    Quantity Q = std::remove_cvref_t<FwdQ>>
requires UnitOf<MP_UNITS_REMOVE_CONST(decltype(ToU)), Q::quantity_spec> &&
           RepresentationOf<ToRep, Q::quantity_spec> && std::constructible_from<ToRep, typename Q::rep> &&
           detail::ExplicitlyCastable<Q::unit, ToU, ToRep> &&
           detail::ValidRoundingPolicyFor<Policy, typename Q::rep, ToRep>
[[nodiscard]]
constexpr
Quantity auto
value_cast(
    FwdQ&& q,
    Policy policy = Policy{});
» more...

Explicit cast of a quantity point's representation type and unit

template<
    typename ToRep,
    Unit auto ToU,
    typename FwdQP,
    RoundingPolicy Policy = truncated_t,
    QuantityPoint QP = std::remove_cvref_t<FwdQP>>
requires UnitOf<MP_UNITS_REMOVE_CONST(decltype(ToU)), QP::quantity_spec> &&
           RepresentationOf<ToRep, QP::quantity_spec> && std::constructible_from<ToRep, typename QP::rep> &&
           detail::ExplicitlyCastable<QP::unit, ToU, ToRep> &&
           detail::ValidRoundingPolicyFor<Policy, typename QP::rep, ToRep>
[[nodiscard]]
constexpr
QuantityPoint auto
value_cast(
    FwdQP&& qp,
    Policy policy = Policy{});
» more...

Explicit cast of a quantity point's unit and representation type

template<
    Unit auto ToU,
    typename ToRep,
    typename FwdQP,
    RoundingPolicy Policy = truncated_t,
    QuantityPoint QP = std::remove_cvref_t<FwdQP>>
requires UnitOf<MP_UNITS_REMOVE_CONST(decltype(ToU)), QP::quantity_spec> &&
           RepresentationOf<ToRep, QP::quantity_spec> && std::constructible_from<ToRep, typename QP::rep> &&
           detail::ExplicitlyCastable<QP::unit, ToU, ToRep> &&
           detail::ValidRoundingPolicyFor<Policy, typename QP::rep, ToRep>
[[nodiscard]]
constexpr
QuantityPoint auto
value_cast(
    FwdQP&& qp,
    Policy policy = Policy{});
» more...

Return Value

  • the quantity converted to quantity type ToQ
  • the quantity converted to representation type ToRep
  • the quantity converted to unit ToU
  • the quantity point with its quantity-from-origin cast to ToQ
  • the quantity point cast to ToQP
  • the quantity point converted to representation type ToRep
  • the quantity point converted to unit ToU
  • the quantity converted to unit ToU and representation type ToRep
  • the quantity point converted to unit ToU and representation type ToRep

NOTE

The return value should not be discarded.

Template Parameters

NameDescription
ToQa target quantity type to which to cast the representation
ToRepa representation type to use for a target quantity
ToUa unit to use for a target quantity
ToQPa target quantity point type to which to cast the representation of the point

Parameters

NameDescription
qthe quantity to cast
policyan optional rounding policy (truncated when not provided)
qpthe quantity point to cast