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__]]