xref: /llvm-project/libcxx/test/std/experimental/simd/simd.traits/is_simd_mask.pass.cpp (revision 0e30dd44adc9e3e19a57d856cbb01efc25b9b79d)
1*0e30dd44SZhangyin //===----------------------------------------------------------------------===//
2*0e30dd44SZhangyin //
3*0e30dd44SZhangyin // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*0e30dd44SZhangyin // See https://llvm.org/LICENSE.txt for license information.
5*0e30dd44SZhangyin // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*0e30dd44SZhangyin //
7*0e30dd44SZhangyin //===----------------------------------------------------------------------===//
8*0e30dd44SZhangyin 
9*0e30dd44SZhangyin // UNSUPPORTED: c++03, c++11, c++14
10*0e30dd44SZhangyin 
11*0e30dd44SZhangyin // <experimental/simd>
12*0e30dd44SZhangyin //
13*0e30dd44SZhangyin // [simd.traits]
14*0e30dd44SZhangyin // template <class T> struct ex::is_simd_mask;
15*0e30dd44SZhangyin // template <class T> inline constexpr bool ex::is_simd_mask_v = ex::is_simd_mask<T>::value;
16*0e30dd44SZhangyin 
17*0e30dd44SZhangyin #include "../test_utils.h"
18*0e30dd44SZhangyin 
19*0e30dd44SZhangyin namespace ex = std::experimental::parallelism_v2;
20*0e30dd44SZhangyin 
21*0e30dd44SZhangyin template <class T, std::size_t>
22*0e30dd44SZhangyin struct CheckIsSimdMask {
23*0e30dd44SZhangyin   template <class SimdAbi>
operator ()CheckIsSimdMask24*0e30dd44SZhangyin   void operator()() {
25*0e30dd44SZhangyin     static_assert(ex::is_simd_mask<ex::simd_mask<T, SimdAbi>>::value);
26*0e30dd44SZhangyin 
27*0e30dd44SZhangyin     static_assert(!ex::is_simd_mask<T>::value);
28*0e30dd44SZhangyin     static_assert(!ex::is_simd_mask<ex::simd<T, SimdAbi>>::value);
29*0e30dd44SZhangyin 
30*0e30dd44SZhangyin     static_assert(ex::is_simd_mask_v<ex::simd_mask<T, SimdAbi>>);
31*0e30dd44SZhangyin 
32*0e30dd44SZhangyin     static_assert(!ex::is_simd_mask_v<T>);
33*0e30dd44SZhangyin     static_assert(!ex::is_simd_mask_v<ex::simd<T, SimdAbi>>);
34*0e30dd44SZhangyin   }
35*0e30dd44SZhangyin };
36*0e30dd44SZhangyin 
main(int,char **)37*0e30dd44SZhangyin int main(int, char**) {
38*0e30dd44SZhangyin   test_all_simd_abi<CheckIsSimdMask>();
39*0e30dd44SZhangyin   return 0;
40*0e30dd44SZhangyin }
41