1 | // RUN: %clang_cc1 -std=c++11 -fcoroutines-ts %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 | |