https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107466

--- Comment #6 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jonathan Wakely <r...@gcc.gnu.org>:

https://gcc.gnu.org/g:a64775a0edd46980036b757041f0c065ed9f8d22

commit r13-4364-ga64775a0edd46980036b757041f0c065ed9f8d22
Author: Jonathan Wakely <jwak...@redhat.com>
Date:   Mon Nov 28 09:44:52 2022 +0000

    libstdc++: Make 16-bit std::subtract_with_carry_engine work [PR107466]

    This implements the proposed resolution of LWG 3809, so that
    std::subtract_with_carry_engine can be used with a 16-bit result_type.
    Currently this produces a narrowing error when instantiating the
    std::linear_congruential_engine to create the initial state. It also
    truncates the default_seed constant when passing it as a result_type
    argument.

    Change the type of the constant to uint_least32_t and pass 0u when the
    default_seed should be used.

    libstdc++-v3/ChangeLog:

            PR libstdc++/107466
            * include/bits/random.h (subtract_with_carry_engine): Use 32-bit
            type for default seed. Use 0u as default argument for
            subtract_with_carry_engine(result_type) constructor and
            seed(result_type) member function.
            * include/bits/random.tcc (subtract_with_carry_engine): Use
            32-bit type for default seed and engine used for initial state.
            *
testsuite/26_numerics/random/subtract_with_carry_engine/cons/lwg3809.cc:
            New test.

Reply via email to