xref: /llvm-project/libcxx/test/std/experimental/simd/simd.traits/is_simd.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;
15*0e30dd44SZhangyin // template <class T> inline constexpr bool ex::is_simd_v =
16*0e30dd44SZhangyin // ex::is_simd<T>::value;
17*0e30dd44SZhangyin 
18*0e30dd44SZhangyin #include "../test_utils.h"
19*0e30dd44SZhangyin 
20*0e30dd44SZhangyin namespace ex = std::experimental::parallelism_v2;
21*0e30dd44SZhangyin 
22*0e30dd44SZhangyin template <class T, std::size_t>
23*0e30dd44SZhangyin struct CheckIsSimd {
24*0e30dd44SZhangyin   template <class SimdAbi>
operator ()CheckIsSimd25*0e30dd44SZhangyin   void operator()() {
26*0e30dd44SZhangyin     static_assert(ex::is_simd<ex::simd<T, SimdAbi>>::value);
27*0e30dd44SZhangyin 
28*0e30dd44SZhangyin     static_assert(!ex::is_simd<T>::value);
29*0e30dd44SZhangyin     static_assert(!ex::is_simd<ex::simd_mask<T, SimdAbi>>::value);
30*0e30dd44SZhangyin 
31*0e30dd44SZhangyin     static_assert(ex::is_simd_v<ex::simd<T, SimdAbi>>);
32*0e30dd44SZhangyin 
33*0e30dd44SZhangyin     static_assert(!ex::is_simd_v<T>);
34*0e30dd44SZhangyin     static_assert(!ex::is_simd_v<ex::simd_mask<T, SimdAbi>>);
35*0e30dd44SZhangyin   }
36*0e30dd44SZhangyin };
37*0e30dd44SZhangyin 
main(int,char **)38*0e30dd44SZhangyin int main(int, char**) {
39*0e30dd44SZhangyin   test_all_simd_abi<CheckIsSimd>();
40*0e30dd44SZhangyin   return 0;
41*0e30dd44SZhangyin }
42