C++ Logo

std-proposals

Advanced search

Re: [std-proposals] On the standardization of mp-units P3045R1

From: Charles R Hogg <charles.r.hogg_at_[hidden]>
Date: Thu, 27 Jun 2024 13:59:16 -0400
On Thu, Jun 27, 2024, 1:10 PM Ville Voutilainen via Std-Proposals <
std-proposals_at_[hidden]> wrote:

> On Wed, 26 Jun 2024 at 23:17, Mateusz Pusz via Std-Proposals
> <std-proposals_at_[hidden]> wrote:
> >
> > During the discussion in the SG6 it was raised that that `30 *
> absolute<deg_C>` feels wrong, and I tend to agree with that. This was the
> only usage of `absolute` so, if multiply syntax should not use it, the
> `absolute` can be removed. After that, `30 * delta<deg_C>` looks like a
> hack and not a feature.
> >
> > I am looking for some other solutions that would help here. Maybe we
> should:
> > - disallow the multiply syntax for offset units (K, deg_C, deg_F),
> > - change `delta` to be a functor and call it as `delta<deg_C>(20)` which
> produces a `quantity`
> > - re-add `absolute` to create a `quantity_point` with the same syntax
> (e.g., `absolute<deg_C>`)
> >
> > With the above, we would end up with the following helpers:
> >
> > ```cpp
> > quantity q1 = 40 * m;
> > quantity q2 = delta<m>(40);
> > quantity_point q3 = absolute<m>(40);
> > quantity q4 = 40 * deg_C; // Compile-time error
> > quantity q5 = delta<deg_C>(40);
> > quantity_point q6 = absolute<deg_C>(40);
> > quantity q7 = 40 * isq::thermodynamic_temperature[deg_C]; //
> Compile-time error
> > quantity q8 = delta<isq::thermodynamic_temperature[deg_C]>(40);
> > quantity_point q9 = absolute<isq::thermodynamic_temperature[deg_C]>(40);
> > ```
> >
> > With the proposed change, I hope that is more evident what the following
> code does:
> >
> > ```cpp
> > quantity q = delta<K>(300);
> > quantity_point qp = absolute<K>(300);
>
> These look very clear to me.
>
> > static_cast(q.in(deg_C) != qp.in(deg_C).quantity_from_zero());
>
> This one less so. Also.. huh? static_cast to what?
>

Based on context, I'm guessing this was intended to mean `static_assert`.


> Why can't we just have a to_absolute<T>(U) ?
> --
> Std-Proposals mailing list
> Std-Proposals_at_[hidden]
> https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals
>

Received on 2024-06-27 17:59:31