コルーチンの学習していてふと思ったのですが、constexpr対応できないのかなと思いました。
例えばですが、
C++
1struct generator 2{ 3 struct promise_type; 4 using handle_t = std::coroutine_handle<promise_type>; 5 struct promise_type 6 { 7 int value; 8 auto get_return_object() 9 { 10 return generator{ handle_t::from_promise(*this) }; 11 } 12 auto initial_suspend() 13 { 14 return std::suspend_always{}; 15 } 16 auto final_suspend() 17 { 18 return std::suspend_always{}; 19 } 20 auto yield_value(int _value) 21 { 22 value = _value; 23 return std::suspend_always{}; 24 } 25 auto return_void() {} 26 auto unhandled_exception() {} 27 }; 28 void move_next() 29 { 30 handle.resume(); 31 } 32 int get_value() 33 { 34 return handle.promise().value; 35 } 36 generator(const generator&) = delete; 37 generator(generator&& _rhs)noexcept 38 :handle{ std::exchange(_rhs.handle,nullptr) } 39 {} 40private: 41 explicit generator(handle_t _handle) 42 :handle{ _handle } 43 {} 44 handle_t handle; 45}; 46 47generator F() 48{ 49 co_yield 1; 50 co_yield 2; 51} 52 53int main() 54{ 55 auto x = F(); 56 x.move_next(); 57 auto n1 = x.get_value(); 58 x.move_next(); 59 auto n2 = x.get_value(); 60 return 0; 61}
このようなコードだったらn1には1,n2には2が入ると確定だと思います。
[質問]
①constexpr対応しようという話はあったのか
②もしあった場合、どのような理由でなしになったのか
お願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。