1 /* { dg-do compile } */
2 /* { dg-additional-options "-Wno-return-type" } */
3
4 struct A {
operator ()A5 bool operator()(int p1, int p2) { return p1 && p2; }
6 };
7 class B {
8 public:
9 bool *cbegin();
10 bool *cend();
11 };
operator &&(B p1,T p2)12 template <class T> void operator&&(B p1, T p2) {
13 B a;
14 arrayContTransform(p1, p2, a, A());
15 }
16
17 template <typename _InputIterator1, typename T, typename _OutputIterator,
18 typename _BinaryOperation>
myrtransform(_InputIterator1 p1,_OutputIterator p2,T p3,_BinaryOperation p4)19 void myrtransform(_InputIterator1 p1, _OutputIterator p2, T p3,
20 _BinaryOperation p4) {
21 _InputIterator1 b;
22 for (; b != p1; ++b, ++p2)
23 *p2 = p4(*b, p3);
24 }
25
26 template <typename L, typename R, typename RES, typename BinaryOperator>
arrayContTransform(L p1,R p2,RES p3,BinaryOperator p4)27 void arrayContTransform(L p1, R p2, RES p3, BinaryOperator p4) {
28 myrtransform(p1.cend(), p3.cbegin(), p2, p4);
29 }
30
31 class C {
32 public:
33 B getArrayBool();
34 };
35 class D {
36 B getArrayBool(const int &);
37 C lnode_p;
38 };
39 bool c;
getArrayBool(const int &)40 B D::getArrayBool(const int &) { lnode_p.getArrayBool() && c; }
41
42 // { dg-final { scan-tree-dump "vectorized 1 loops" "vect" { target { i?86-*-* x86_64-*-* } } } }
43