Multiplication operators

Synopses

Declared in <mp‐units/framework/dimension.h>

Multiplies a unit by a reference

template<Unit U1>
[[nodiscard]]
consteval
/* implementation-defined */
operator*(
    U1 u1,
    reference r);

Multiplies a reference by a unit

template<Unit U2>
[[nodiscard]]
consteval
/* implementation-defined */
operator*(
    reference r,
    U2 u2);

scaled_unit specializations have priority in this operation. This means that the library framework prevents passing it as an element to the derived_unit. In such case only the reference unit is passed to the derived unit and the magnitude remains outside forming another scaled unit as a result of the operation.

template<
    Dimension Lhs,
    Dimension Rhs>
[[nodiscard]]
consteval
Dimension auto
operator*(
    Lhs lhs,
    Rhs rhs);

scaled_unit specializations have priority in this operation. This means that the library framework prevents passing it as an element to the derived_unit. In such case only the reference unit is passed to the derived unit and the magnitude remains outside forming another scaled unit as a result of the operation.

template<
    Dimension Lhs,
    Dimension Rhs>
[[nodiscard]]
consteval
Dimension auto
operator*(
    Lhs lhs,
    Rhs rhs);

scaled_unit specializations have priority in this operation. This means that the library framework prevents passing it as an element to the derived_unit. In such case only the reference unit is passed to the derived unit and the magnitude remains outside forming another scaled unit as a result of the operation.

template<
    Dimension Lhs,
    Dimension Rhs>
[[nodiscard]]
consteval
Dimension auto
operator*(
    Lhs lhs,
    Rhs rhs);

Deleted overload rejecting reference * quantity in favor of quantity * reference

template<
    Reference R,
    typename Q>
requires Quantity<std::remove_cvref_t<Q>>
constexpr
auto
operator*(
    R r,
    Q&& q) = delete;

Deleted overload rejecting reference * representation in favor of representation * reference

template<
    Reference R,
    typename Rep>
requires RepresentationOf<std::remove_cvref_t<Rep>, get_quantity_spec(R{})>
constexpr
auto
operator*(
    R r,
    Rep&& rep) = delete;

Multiplies two references

template<
    typename Q2,
    typename U2>
[[nodiscard]]
consteval
/* implementation-defined */
operator*(
    reference r1,
    reference<Q2, U2> r2);

Multiplication operator

template<
    typename Value,
    auto R1,
    typename Rep1>
requires (!Quantity<Value>) && (!Reference<Value>) &&
            ScalableResultOf<get_quantity_spec(R1), std::multiplies<>, const Value&, Rep1>
[[nodiscard]]
constexpr
Quantity auto
operator*(
    Value const& val,
    quantity<R1, Rep1> const& q);

Multiplication operator

template<
    auto R1,
    typename Rep1,
    typename Value>
requires (!Quantity<Value>) && (!Reference<Value>) &&
            ScalableResultOf<get_quantity_spec(R1), std::multiplies<>, Rep1, const Value&>
[[nodiscard]]
constexpr
Quantity auto
operator*(
    quantity<R1, Rep1> const& q,
    Value const& val);

Rebinds a quantity to a reference obtained by multiplying its own reference by R

template<
    typename FwdQ,
    Reference R,
    Quantity Q = std::remove_cvref_t<FwdQ>>
[[nodiscard]]
constexpr
Quantity auto
operator*(
    FwdQ&& q,
    R r);

Constructs a quantity from a representation value and a reference

template<
    typename FwdRep,
    Reference R,
    RepresentationOf<get_quantity_spec(R{})> Rep = std::remove_cvref_t<FwdRep>>
requires (!detail::OffsetUnit<decltype(get_unit(R{}))>)
[[nodiscard]]
constexpr
quantity<R{}, Rep>
operator*(
    FwdRep&& lhs,
    R r);

Deprecated constructor of a quantity from a representation value and an offset‐unit reference

template<
    typename FwdRep,
    Reference R,
    RepresentationOf<get_quantity_spec(R{})> Rep = std::remove_cvref_t<FwdRep>>
requires detail::OffsetUnit<decltype(get_unit(R{}))>
[[deprecated("2.3.0: References using offset units (e.g., temperatures) should be constructed with the `delta` or `point` helpers")]]
constexpr
auto
operator*(
    FwdRep&& lhs,
    R r);

Multiplication operator

template<
    auto R1,
    typename Rep1,
    auto R2,
    typename Rep2>
requires InvocableQuantities<std::multiplies<>, quantity<R1, Rep1>, quantity<R2, Rep2>>
[[nodiscard]]
constexpr
Quantity auto
operator*(
    quantity<R1, Rep1> const& lhs,
    quantity<R2, Rep2> const& rhs);

Return Value

  • a reference resulting from multiplying the quantity specification and the unit

  • a reference resulting from multiplying the quantity specifications and the units

  • quantity holding the same numerical value as q, with reference Q::reference * R{}

  • quantity of reference r holding the value of lhs

Parameters

Name

Description

u1

the unit to multiply

r

the reference to multiply by

u2

the unit to multiply by

q

quantity operand (unused)

rep

representation operand (unused)

r1

the reference to multiply

r2

the reference to multiply by

lhs

representation value to become the quantity's numerical value

Created with MrDocs