4021. mdspan::is_always_meow() should be noexcept

Section: 24.7.3.6.1 [mdspan.mdspan.overview] Status: New Submitter: Stephan T. Lavavej Opened: 2023-12-07 Last modified: 2023-12-10 10:18:59 UTC

Priority: Not Prioritized

View all issues with New status.

Discussion:

It can easily be proven that mdspan::is_always_meow() is preconditionless and can never throw exceptions. microsoft/STL has already shipped a noexcept-strengthened implementation, libc++ would like to (see llvm/llvm-project#74254), and together we believe that the Standard should simply mandate noexcept so users can rely on this. The proof is:

Constant expressions can surely be obtained without throwing exceptions.

Proposed resolution:

This wording is relative to N4964.

  1. Modify 24.7.3.6.1 [mdspan.mdspan.overview], class template mdspan synopsis, as indicated:

    […]
    static constexpr bool is_always_unique() noexcept
      { return mapping_type::is_always_unique(); }
    static constexpr bool is_always_exhaustive() noexcept
      { return mapping_type::is_always_exhaustive(); }
    static constexpr bool is_always_strided() noexcept
      { return mapping_type::is_always_strided(); }
    […]