This is the mail archive of the mailing list for the libstdc++ project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] PR libstdc++/81468 constrain std::chrono::time_point constructor

On Wed, Sep 13, 2017 at 10:55 AM, Jonathan Wakely <> wrote:
> +// DR 1177
> +static_assert(is_constructible<duration<float>, duration<double>>{},
> +    "can convert duration with one floating point rep to another");
> +static_assert(is_constructible<duration<float>, duration<int>>{},
> +    "can convert duration with integral rep to one with floating point rep");
> +static_assert(!is_constructible<duration<int>, duration<float>>{},
> +    "cannot convert duration with floating point rep to one with integral rep");
> +static_assert(is_constructible<duration<int>, duration<long>>{},
> +    "can convert duration with one integral rep to another");
> +
> +static_assert(!is_constructible<duration<int>, duration<int, ratio<2,3>>>{},
> +    "cannot convert duration to one with different period");
> +static_assert(is_constructible<duration<float>, duration<int, ratio<2,3>>>{},
> +    "unless it has a floating-point representation");

"it" is a little ambiguous here unless you read the next message's
mention of "the original"...

> +static_assert(is_constructible<duration<float>, duration<int, ratio<1,3>>>{},
> +    "or a period that is an integral multiple of the original");

This is backwards: duration<Inty, P1> is convertible to duration<Inty,
P2> iff P1 is an integral multiple of P2, i.e., if the original's
period is an integral multiple of "its" period.

The static assert only passed because duration<float> was used as the
destination type (presumably because of a copy/paste error).


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]