diff options
Diffstat (limited to 'libcxx/test/std/experimental/simd/simd.cons/generator.pass.cpp')
| -rw-r--r-- | libcxx/test/std/experimental/simd/simd.cons/generator.pass.cpp | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/libcxx/test/std/experimental/simd/simd.cons/generator.pass.cpp b/libcxx/test/std/experimental/simd/simd.cons/generator.pass.cpp new file mode 100644 index 00000000000..baf7d936c6a --- /dev/null +++ b/libcxx/test/std/experimental/simd/simd.cons/generator.pass.cpp @@ -0,0 +1,46 @@ +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// UNSUPPORTED: c++98, c++03 + +// See GCC PR63723. +// UNSUPPORTED: gcc-4.9 + +// <experimental/simd> +// +// [simd.class] +// template <class G> explicit simd(G&& gen); + +#include <cstdint> +#include <experimental/simd> + +using namespace std::experimental::parallelism_v2; + +template <class T, class... Args> +auto not_supported_native_simd_ctor(Args&&... args) + -> decltype(native_simd<T>(std::forward<Args>(args)...), void()) = delete; + +template <class T> +void not_supported_native_simd_ctor(...) {} + +template <class T, class... Args> +auto supported_native_simd_ctor(Args&&... args) + -> decltype(native_simd<T>(std::forward<Args>(args)...), void()) {} + +template <class T> +void supported_native_simd_ctor(...) = delete; + +void compile_generator() { + supported_native_simd_ctor<int>([](int i) { return i; }); + not_supported_native_simd_ctor<int>([](int i) { return float(i); }); + not_supported_native_simd_ctor<int>([](intptr_t i) { return (int*)(i); }); + not_supported_native_simd_ctor<int>([](int* i) { return i; }); +} + +int main() {} |

