[Bug libstdc++/96042] Reference type of std::ranges::iota is __int128 with -std=c++2a?!

cvs-commit at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Wed Aug 19 15:59:26 GMT 2020


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

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

https://gcc.gnu.org/g:386fd16c551188e20d5b1684b7139e4269f9a739

commit r11-2766-g386fd16c551188e20d5b1684b7139e4269f9a739
Author: Jonathan Wakely <jwakely@redhat.com>
Date:   Wed Aug 19 16:27:25 2020 +0100

    libstdc++: Make __int128 meet integer-class requirements [PR 96042]

    Because __int128 can be used as the difference type for iota_view, we
    need to ensure that it meets the requirements of an integer-class type.
    The requirements in [iterator.concept.winc] p10 include numeric_limits
    being specialized and giving meaningful answers. Currently we only
    specialize numeric_limits for non-standard integer types in non-strict
    modes.  However, nothing prevents us from defining an explicit
    specialization for any implementation-defined type, so it doesn't matter
    whether std::is_integral<__int128> is true or not.

    This patch ensures that the numeric_limits specializations for signed
    and unsigned __int128 are defined whenever __int128 is available. It
    also makes the __numeric_traits and __int_limits helpers work for
    __int128, via a new __gnu_cxx::__is_integer_nonstrict trait.

    libstdc++-v3/ChangeLog:

            PR libstdc++/96042
            * include/ext/numeric_traits.h (__is_integer_nonstrict): New
            trait which is true for 128-bit integers even in strict modes.
            (__numeric_traits_integer, __numeric_traits): Use
            __is_integer_nonstrict instead of __is_integer.
            * include/std/limits [__STRICT_ANSI__ && __SIZEOF_INT128__]
            (numeric_limits<__int128>, (numeric_limits<unsigned __int128>):
            Define.
            * testsuite/std/ranges/iota/96042.cc: New test.


More information about the Gcc-bugs mailing list