1f9f97caeSKonstantin Varlamov //===----------------------------------------------------------------------===//
2f9f97caeSKonstantin Varlamov //
3f9f97caeSKonstantin Varlamov // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4f9f97caeSKonstantin Varlamov // See https://llvm.org/LICENSE.txt for license information.
5f9f97caeSKonstantin Varlamov // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6f9f97caeSKonstantin Varlamov //
7f9f97caeSKonstantin Varlamov //===----------------------------------------------------------------------===//
8f9f97caeSKonstantin Varlamov
9f9f97caeSKonstantin Varlamov // UNSUPPORTED: c++03, c++11, c++14
10f9f97caeSKonstantin Varlamov
11f9f97caeSKonstantin Varlamov // <valarray>
12f9f97caeSKonstantin Varlamov
13f9f97caeSKonstantin Varlamov // template<class T, size_t cnt> valarray(const T(&)[cnt], size_t) -> valarray<T>;
14f9f97caeSKonstantin Varlamov
15f9f97caeSKonstantin Varlamov #include <valarray>
16f9f97caeSKonstantin Varlamov
17f9f97caeSKonstantin Varlamov #include "test_macros.h"
18f9f97caeSKonstantin Varlamov
main(int,char **)19f9f97caeSKonstantin Varlamov int main(int, char**)
20f9f97caeSKonstantin Varlamov {
21f9f97caeSKonstantin Varlamov {
22f9f97caeSKonstantin Varlamov // From (initializer_list<T>)
23f9f97caeSKonstantin Varlamov std::valarray v = {1, 2, 3, 4, 5};
24f9f97caeSKonstantin Varlamov ASSERT_SAME_TYPE(decltype(v), std::valarray<int>);
25f9f97caeSKonstantin Varlamov }
26f9f97caeSKonstantin Varlamov
27f9f97caeSKonstantin Varlamov {
28f9f97caeSKonstantin Varlamov // From (const T(&)[N], size_t)
29f9f97caeSKonstantin Varlamov long a[] = {1, 2, 3, 4, 5};
30f9f97caeSKonstantin Varlamov std::valarray v(a, 5);
31f9f97caeSKonstantin Varlamov ASSERT_SAME_TYPE(decltype(v), std::valarray<long>);
32f9f97caeSKonstantin Varlamov }
33f9f97caeSKonstantin Varlamov
34f9f97caeSKonstantin Varlamov {
35f9f97caeSKonstantin Varlamov // From (const T&, size_t)
36f9f97caeSKonstantin Varlamov long a[] = {1, 2, 3, 4, 5};
37f9f97caeSKonstantin Varlamov std::valarray v(&a[0], 5);
38f9f97caeSKonstantin Varlamov // Surprising but true.
39f9f97caeSKonstantin Varlamov ASSERT_SAME_TYPE(decltype(v), std::valarray<long*>);
40f9f97caeSKonstantin Varlamov }
41f9f97caeSKonstantin Varlamov
42f9f97caeSKonstantin Varlamov {
43f9f97caeSKonstantin Varlamov // From (slice_array<T>)
44f9f97caeSKonstantin Varlamov std::valarray<long> v{1,2,3,4,5};
45f9f97caeSKonstantin Varlamov std::valarray v2 = v[std::slice(2,3,1)];
46f9f97caeSKonstantin Varlamov static_assert(std::is_same_v<decltype(v2), std::valarray<long>>);
47f9f97caeSKonstantin Varlamov }
48f9f97caeSKonstantin Varlamov
49f9f97caeSKonstantin Varlamov {
50f9f97caeSKonstantin Varlamov // From (gslice_array<T>)
51f9f97caeSKonstantin Varlamov std::valarray<long> v{1,2,3,4,5};
52f9f97caeSKonstantin Varlamov std::valarray v2 = v[std::gslice(0, {5}, {1})];
53f9f97caeSKonstantin Varlamov static_assert(std::is_same_v<decltype(v2), std::valarray<long>>);
54f9f97caeSKonstantin Varlamov }
55f9f97caeSKonstantin Varlamov
56f9f97caeSKonstantin Varlamov {
57f9f97caeSKonstantin Varlamov // From (mask_array<T>)
58f9f97caeSKonstantin Varlamov std::valarray<long> v = {1, 2, 3, 4, 5};
59f9f97caeSKonstantin Varlamov std::valarray<bool> m = {true, false, true, false, true};
60f9f97caeSKonstantin Varlamov std::valarray v2 = v[m];
61f9f97caeSKonstantin Varlamov static_assert(std::is_same_v<decltype(v2), std::valarray<long>>);
62f9f97caeSKonstantin Varlamov }
63f9f97caeSKonstantin Varlamov
64f9f97caeSKonstantin Varlamov {
65f9f97caeSKonstantin Varlamov // From (indirect_array<T>)
66f9f97caeSKonstantin Varlamov std::valarray<long> v = {1, 2, 3, 4, 5};
67*fb855eb9SMark de Wever std::valarray<std::size_t> i = {1, 2, 3};
68f9f97caeSKonstantin Varlamov std::valarray v2 = v[i];
69f9f97caeSKonstantin Varlamov static_assert(std::is_same_v<decltype(v2), std::valarray<long>>);
70f9f97caeSKonstantin Varlamov }
71f9f97caeSKonstantin Varlamov
72f9f97caeSKonstantin Varlamov return 0;
73f9f97caeSKonstantin Varlamov }
74