29 Numerics library [numerics]

29.10 Data-parallel types [simd]

29.10.5 Load and store flags [simd.flags]

29.10.5.1 Class template flags overview [simd.flags.overview]

namespace std::datapar { template<class... Flags> struct flags { // [simd.flags.oper], flags operators template<class... Other> friend consteval auto operator|(flags, flags<Other...>); }; }
[Note 1: 
The class template flags acts like an integer bit-flag for types.
— end note]
Constraints: Every type in the parameter pack Flags is one of convert-flag, aligned-flag, or overaligned-​flag<N>.

29.10.5.2 flags operators [simd.flags.oper]

template<class... Other> friend consteval auto operator|(flags a, flags<Other...> b);
Returns: A default-initialized object of type flags<Flags2...> for some Flags2 where every type in Flags2 is present either in template parameter pack Flags or in template parameter pack Other, and every type in template parameter packs Flags and Other is present in Flags2.
If the packs Flags and Other contain two different specializations overaligned-flag<N1> and overaligned-flag<N2>, Flags2 is not required to contain the specialization overaligned-flag<std​::​min(N1, N2)>.