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