https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115897
Matthias Kretz (Vir) <mkretz at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|RESOLVED |REOPENED
Resolution|FIXED |---
--- Comment #7 from Matthias Kretz (Vir) <mkretz at gcc dot gnu.org> ---
Thank you! Sadly, that doesn't seem to be enough.
Here's another variation reduced from the original source after rebuilding
trunk (https://compiler-explorer.com/z/vzeab64Td):
---------------------------------------------------
namespace std
{
template <typename _Tp, typename _Up>
inline constexpr bool is_same_v = __is_same(_Tp, _Up);
}
namespace simd
{
template <typename _Tp>
inline constexpr int __width_of = 1;
template <typename _Tp>
requires requires { _Tp{}[0]; }
inline constexpr int __width_of<_Tp> = sizeof(_Tp) / sizeof(_Tp{}[0]);
template <typename _Tp>
using _Vp [[gnu::vector_size(16)]] = _Tp;
static_assert(__width_of<_Vp<float>> == 4); // OK
static_assert(not std::is_same_v<float, _Vp<float>>); // OK
template <typename _Tp>
struct __traits
{
using _SimdMember = _Vp<_Tp>;
static_assert(sizeof(_SimdMember) == sizeof(_Vp<_Tp>)); // OK
static_assert(std::is_same_v<_SimdMember, _Vp<_Tp>>, "wrong1");
static_assert(__width_of<_Vp<_Tp>> == 4); // OK
static_assert(__width_of<_SimdMember> == 4, "wrong2");
template <typename _Arg>
static constexpr bool _S_is_simd_ctor_arg = std::is_same_v<_Arg,
_SimdMember>;
static_assert(not _S_is_simd_ctor_arg<_Tp>, "wrong3");
};
__traits<float> test = {};
} // namespace simd
---------------------------------------------------
The three 'static_assert' printing 'wrong[123]' should not fail. They don't
fail with GCC 13.