#c #gcc #c 20 #c -coroutine #gcc10
#c #gcc #c 20 #c -сопрограмма #gcc10
Вопрос:
Я установил компилятор gcc-10 на свой ubuntu 20.04. Мне нужно было протестировать работу сопрограммы ts, поэтому я нашел пример с использованием сопрограмм и попытался его скомпилировать.
exemple:
#include <coroutine>
#include <iostream>
struct simple {
static inline int x = 0;
int id = 0;
simple() : id{ x } { std::cout << id << " constructedn"; }
simple(simpleamp;amp;) : id{ x } { std::cout << id << " move constructedn"; }
~simple() { std::cout << id << " destructedn"; }
struct promise_type {
simple get_return_object() { return {}; }
void return_void() {}
void unhandled_exception() { std::terminate(); }
auto initial_suspend() noexcept { return std::suspend_never{}; }
auto final_suspend() noexcept { return std::suspend_never{}; }
};
};
simple f() { co_return; }
int main() {
f();
}
Несмотря на то, что я сделал gcc-10 компилятором по умолчанию в clion, добавил требуемый флаг и включил стандарт 20 в cmake, компилятор все равно выдает ошибку. Ошибка в ключевом слове co_return
Std::experimental::coroutine_traits type was not found; include <experimental/coroutine> before defining a coroutine
Это странно, потому что заголовок включен без пробела, и функции из него также доступны.
cmake:
cmake_minimum_required(VERSION 3.17)
project(test6)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fcoroutines")
add_executable(test6 main.cpp)
Как можно устранить этот пробел?
Я использую g version 10.2.0
и
Package: libstdc -10-dev-mips64r6-cross
Architecture: all
Version: 10.2.0-5ubuntu1~20.04cross1
Комментарии:
1.
<coroutine>
должно работать, почему вы используете<experimental/coroutine>
?2. Итак, вы пытались
include <experimental/coroutine>
, как следует из ошибки? Поддержка вg
/libstc
версиях, которые у вас есть, все еще может быть частично экспериментальной (или просто не работает). Какие это версии?3. работает для меня .
4. @MarekR Huh. gcc10.1 выполняет дополнительную конструкцию перемещения, которой нет в gcc10.2 🙂 Кажется, оптимизатор стал немного лучше.
5. Пожалуйста, добавьте всю эту соответствующую информацию в вопрос, а не в качестве комментария.