// PR c++/48869 // { dg-do run } // { dg-options "-std=gnu++0x" } template struct A { A () {} A (const A&) = delete; void foo () {} ~A () {} }; template struct B { B () {} B (const B&) {} void foo () {} ~B () {} }; void __attribute__((used)) foo (B<6> b6) { #pragma omp task b6.foo (); } int main () { A<0> a0; #pragma omp task shared(a0) a0.foo (); #pragma omp task default(shared) a0.foo (); #pragma omp parallel shared(a0) #pragma omp task a0.foo (); #pragma omp task { A<1> a1; a1.foo (); } B<0> b0; #pragma omp task shared(b0) b0.foo (); B<1> b1; #pragma omp task default(shared) b1.foo (); B<2> b2; #pragma omp parallel shared(b2) #pragma omp task b2.foo (); B<3> b3; #pragma omp task b3.foo (); B<4> b4; #pragma omp parallel private (b4) #pragma omp task b4.foo (); B<5> b5; #pragma omp parallel firstprivate (b5) #pragma omp task b5.foo (); return 0; }