https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100127
--- Comment #1 from Iain Sandoe <iains at gcc dot gnu.org> --- I think that this issue is already fixed in the released 10.3 branch and in master (will shortly become GCC11). Please could you try one of those? $ ./gcc-10/gcc-10/bin/g++ -std=c++20 -fcoroutines pr100127.C -S -save-temps pr100127.C: In function ‘future create_future()’: pr100127.C:54:8: error: the coroutine promise type ‘std::__n4861::__coroutine_traits_impl<future, void>::promise_type’ {aka ‘future::promise_type’} declares both ‘return_value’ and ‘return_void’ 54 | future create_future() | ^~~~~~~~~~~~~ pr100127.C:49:14: note: ‘return_void’ declared here 49 | void return_void() {} | ^~~~~~~~~~~ pr100127.C:31:14: note: ‘return_value’ declared here 31 | void return_value(value_type val) { | ^~~~~~~~~~~~ === $ ./gcc-master/gcc-11-0-1/bin/g++ -std=c++20 -fcoroutines pr100127.C -S -save-temps pr100127.C: In function ‘future create_future()’: pr100127.C:54:8: error: the coroutine promise type ‘std::__n4861::__coroutine_traits_impl<future, void>::promise_type’ {aka ‘future::promise_type’} declares both ‘return_value’ and ‘return_void’ 54 | future create_future() | ^~~~~~~~~~~~~ pr100127.C:49:14: note: ‘return_void’ declared here 49 | void return_void() {} | ^~~~~~~~~~~ pr100127.C:31:14: note: ‘return_value’ declared here 31 | void return_value(value_type val) { | ^~~~~~~~~~~~