00001
00002
00003
00004
00005 template <const int N>
00006 struct A
00007 {
00008 A () {}
00009 A (const A&) = delete;
00010 void foo () {}
00011 ~A () {}
00012 };
00013
00014 template <const int N>
00015 struct B
00016 {
00017 B () {}
00018 B (const B&) {}
00019 void foo () {}
00020 ~B () {}
00021 };
00022
00023 void __attribute__((used))
00024 foo (B<6> b6)
00025 {
00026 #pragma omp task
00027 b6.foo ();
00028 }
00029
00030 int
00031 main ()
00032 {
00033 A<0> a0;
00034 #pragma omp task shared(a0)
00035 a0.foo ();
00036 #pragma omp task default(shared)
00037 a0.foo ();
00038 #pragma omp parallel shared(a0)
00039 #pragma omp task
00040 a0.foo ();
00041 #pragma omp task
00042 {
00043 A<1> a1;
00044 a1.foo ();
00045 }
00046 B<0> b0;
00047 #pragma omp task shared(b0)
00048 b0.foo ();
00049 B<1> b1;
00050 #pragma omp task default(shared)
00051 b1.foo ();
00052 B<2> b2;
00053 #pragma omp parallel shared(b2)
00054 #pragma omp task
00055 b2.foo ();
00056 B<3> b3;
00057 #pragma omp task
00058 b3.foo ();
00059 B<4> b4;
00060 #pragma omp parallel private (b4)
00061 #pragma omp task
00062 b4.foo ();
00063 B<5> b5;
00064 #pragma omp parallel firstprivate (b5)
00065 #pragma omp task
00066 b5.foo ();
00067 return 0;
00068 }