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

--- Comment #4 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Tomasz Kaminski <[email protected]>:

https://gcc.gnu.org/g:8c71d18f540650e13ed8e324b595c11630ee6ce6

commit r16-4287-g8c71d18f540650e13ed8e324b595c11630ee6ce6
Author: Luc Grosheintz <[email protected]>
Date:   Mon Sep 29 08:00:18 2025 +0200

    libstdc++: Implement std::layout_left_padded [PR110352].

    This commit adds a new layout layout_left_padded as standardized in
    N5014. It adds a purely internal feature testing macro padded_layouts
    and registers layout_left_padded in the std module.

    This commit implements LWG4372, because without it's not possible
    to properly test padded layouts with a dynamic padding value. It also
    implements LWG4314, for consistency with prior layouts.

    The implementation uses a _PaddedStorage to deduplicate most of the code
    shared between left- and right-padded layouts. It's implemented through
    aggregation rather than inheritence, because of a bug related to
    inheriting conditionally explicit ctors.

    The tests are written such that the canonical version works for
    layout_left_padded. A version for layout_right_padded is derived
    essentially by reversing the order of the extents.

            PR libstdc++/110352

    libstdc++-v3/ChangeLog:

            * include/bits/version.def (padded_layouts): Add new internal
            feature testing macro.
            * include/bits/version.h: Regenerate.
            * include/std/mdspan (__fwd_prod): New overload.
            (layout_left_padded): Add declaration and implementation.
            (layout_right_padded): Add declaration only.
            (layout_left::mapping::mapping): New overload for left
            padded mappings.
            (__index_type_cast): New function that performs a checked cast
            to index_type.
            (__is_left_padded_mapping): New concept.
            (__is_right_padded_mapping): Ditto.
            (__standardized_mapping): Recognize left and right padded
            mappings.
            (_LeftPaddedIndices): Traits for left padded details.
            (_PaddedStorage): New class for implementing padded layouts.
            * src/c++23/std.cc.in (layout_left_padded): Add.
            * testsuite/23_containers/mdspan/layouts/class_mandate_neg.cc:
            Refactor and add tests for layout_left_padded.
            * testsuite/23_containers/mdspan/layouts/ctors.cc: Ditto.
            * testsuite/23_containers/mdspan/layouts/empty.cc: Ditto.
            * testsuite/23_containers/mdspan/layouts/mapping.cc: Ditto.
            * testsuite/23_containers/mdspan/layouts/padded.cc: Ditto.
            * testsuite/23_containers/mdspan/layouts/padded_neg.cc: Ditto.
            * testsuite/23_containers/mdspan/layouts/padded_traits.h: New
            traits.

    Reviewed-by: Tomasz KamiÅski <[email protected]>
    Signed-off-by: Luc Grosheintz <[email protected]>

Reply via email to