std::experimental::simd<T,Abi>::operator!,~,+,-

< cpp‎ | experimental‎ | simd‎ | simd
mask_type operator!() const noexcept;
(1) (parallelism TS v2)
simd operator~() const noexcept;
(2) (parallelism TS v2)
simd operator+() const noexcept;
(3) (parallelism TS v2)
simd operator-() const noexcept;
(4) (parallelism TS v2)

Applies the given unary operator on each element of the simd.

1) Returns a simd_mask<T, Abi> where the ith element equals !operator[](i) for all i in the range of [0size()).
2) Returns a simd where each bit is the inverse of the corresponding bit in *this. This overload participates in overload resolution only if T is an integral type.
3) Returns a copy of itself.
4) Returns a simd where the ith element is initialized to -operator[](i) for all i in the range of [0size()).

Example

#include <experimental/simd>
#include <iostream>
namespace stdx = std::experimental;
 
void print(const stdx::native_simd_mask<int> x)
{
    for (std::size_t i = 0; i < x.size(); ++i)
        std::cout << std::boolalpha << x[i] << ' ';
    std::cout << '\n';
}
 
void print(const stdx::native_simd<int> x)
{
    for (std::size_t i = 0; i < x.size(); ++i)
        std::cout << x[i] << ' ';
    std::cout << '\n';
}
 
int main()
{
    const stdx::native_simd<int> a([](int i) { return i; });
    print(!a);
    print(~a);
    print(+a);
    print(-a);
    return 0;
}

Possible output:

true false false false
-1 -2 -3 -4
0 1 2 3
0 -1 -2 -3