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

Jonathan Wakely <redi at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Target Milestone|---                         |13.2
             Status|UNCONFIRMED                 |NEW
      Known to work|                            |12.3.0
           Keywords|                            |rejects-valid
     Ever confirmed|0                           |1
      Known to fail|                            |13.1.0, 14.0
   Last reconfirmed|                            |2023-06-06
            Summary|[libstdc++] Ambiguous use   |[13/14 Regression]
                   |of [] operator for 0-sized  |Ambiguous use of []
                   |arrays (with clang)         |operator for 0-sized arrays
                   |                            |(with clang)

--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> ---
This fixes it:

--- a/libstdc++-v3/include/std/array
+++ b/libstdc++-v3/include/std/array
@@ -69,7 +69,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION

        // Conversion to a pointer produces a null pointer.
        __attribute__((__always_inline__))
-       constexpr operator _Tp*() const noexcept { return nullptr; }
+       constexpr explicit operator _Tp*() const noexcept { return nullptr; }
      };

      using _Is_swappable = true_type;
@@ -274,12 +274,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       [[__nodiscard__, __gnu__::__const__, __gnu__::__always_inline__]]
       _GLIBCXX17_CONSTEXPR pointer
       data() noexcept
-      { return _M_elems; }
+      { return static_cast<pointer>(_M_elems); }

       [[__nodiscard__]]
       _GLIBCXX17_CONSTEXPR const_pointer
       data() const noexcept
-      { return _M_elems; }
+      { return static_cast<const_pointer>(_M_elems); }
     };

 #if __cpp_deduction_guides >= 201606



Alternatively, so does this:

--- a/libstdc++-v3/include/std/array
+++ b/libstdc++-v3/include/std/array
@@ -240,7 +240,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       front() noexcept
       {
        __glibcxx_requires_nonempty();
-       return _M_elems[0];
+       return _M_elems[0u];
       }

       [[__nodiscard__]]
@@ -250,7 +250,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 #if __cplusplus >= 201402L
        __glibcxx_requires_nonempty();
 #endif
-       return _M_elems[0];
+       return _M_elems[0u];
       }

       [[__nodiscard__]]

Reply via email to