// { dg-options "-D_GLIBCXX_ASSERTIONS" } // { dg-do run } #include #include using std::valarray; template bool equal(const valarray& lhs, const valarray& rhs) { if (lhs.size() != rhs.size()) return false; for (unsigned i = 0; i < lhs.size(); ++i) if (lhs[i] != rhs[i]) return false; return true; } // Taken from examples in C++11 [valarray.sub]. void test01() // valarray operator[](const valarray& boolarr) const; { const valarray v0("abcdefghijklmnop", 16); const bool vb[] = {false, false, true, true, false, true}; valarray v1 = v0[valarray(vb, 6)]; VERIFY( equal(v1, valarray("cdf", 3)) ); } void test02() // mask_array operator[](const valarray& boolarr); { valarray v0("abcdefghijklmnop", 16); valarray v1("ABC", 3); const bool vb[] = {false, false, true, true, false, true}; v0[valarray(vb, 6)] = v1; VERIFY( equal(v0, valarray("abABeCghijklmnop", 16)) ); } int main() { test01(); test02(); }