This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of New status.
std::simd::select(bool c, const T& a, const U& b) is underconstrained
Section: 29.10.8.13 [simd.alg] Status: New Submitter: Hewill Kang Opened: 2025-09-27 Last modified: 2025-10-22
Priority: 3
View all issues with New status.
Discussion:
This function currently only requires that c ? a : b be a well-formed expression, which simply
returns c ? a : b.
basic_vec, basic_mask, or vectorizable type,
requiring T and U to be copyable seems reasonable since they are trivially copyable.
It shouldn't take non-copyable objects and produce hard errors in the function body.
[2025-10-22; Reflector poll.]
Set priority to 3 after reflector poll.
Split opinion between further pinning down exact condition (is_constructible_v,
decltype(auto(c ? a : b))), and accepting the PR (copyable) as this is
not meant to be generic facility.
Proposed resolution:
This wording is relative to N5014.
Modify 29.10.3 [simd.syn] as indicated:
namespace std::simd {
[…]
// 29.10.8.13 [simd.alg], algorithms
[…]
template<copyableclass T, copyableclass U>
constexpr auto select(bool c, const T& a, const U& b)
-> remove_cvref_t<decltype(c ? a : b)>;
[…]
};
Modify 29.10.8.13 [simd.alg] as indicated:
template<copyableclassT, copyableclassU> constexpr auto select(bool c, const T& a, const U& b) -> remove_cvref_t<decltype(c ? a : b)>;-9- Effects: Equivalent to:
return c ? a : b;