Home | History | Annotate | Download | only in Parser
      1 // RUN: %clang_cc1 -std=c++11 -fcoroutines %s -verify
      2 
      3 template<typename T, typename U>
      4 U f(T t) {
      5   co_await t;
      6   co_yield t;
      7 
      8   1 + co_await t;
      9   1 + co_yield t; // expected-error {{expected expression}}
     10 
     11   auto x = co_await t;
     12   auto y = co_yield t;
     13 
     14   for co_await (int x : t) {}
     15   for co_await (int x = 0; x != 10; ++x) {} // expected-error {{'co_await' modifier can only be applied to range-based for loop}}
     16 
     17   if (t)
     18     co_return t;
     19   else
     20     co_return {t};
     21 }
     22 
     23 struct Y {};
     24 struct X { Y operator co_await(); };
     25 struct Z {};
     26 Y operator co_await(Z);
     27 
     28 void f(X x, Z z) {
     29   x.operator co_await();
     30   operator co_await(z);
     31 }
     32 
     33 void operator co_await(); // expected-error {{must have at least one parameter}}
     34 void operator co_await(X, Y, Z); // expected-error {{must be a unary operator}}
     35 void operator co_await(int); // expected-error {{parameter of class or enumeration type}}
     36