https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109822
Bug ID: 109822
Summary: Converting std::experimental::simd masks yields an
error
Product: gcc
Version: 12.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libstdc++
Assignee: unassigned at gcc dot gnu.org
Reporter: jens.maurer at gmx dot net
Target Milestone: ---
Reproducer:
#include <experimental/simd>
auto x =
to_native(to_fixed_size(std::experimental::native_simd<int>::mask_type()));
This converts a native SIMD mask type to fixed-size and back. I believe this
should work, but gcc disagrees:
/usr/include/c++/12/experimental/bits/simd.h:3224:3: note: template argument
deduction/substitution failed:
x.cc:4:19: note: mismatched types ‘long unsigned int’ and ‘int’
(Also reproducible with gcc 13.1.)
The issue is that the SIMD implementation of libstdc++ uses a mixture of "int"
and "size_t" for the type of non-type template parameters for "number of
elements in this SIMD vector", causing deduction failures when gcc tries to
match template arguments with template parameters.
It seems the Technical Specification uses "int" throughout.