Почему gcc-10 не видит ключевые слова, связанные с ts сопрограммы?

#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. Пожалуйста, добавьте всю эту соответствующую информацию в вопрос, а не в качестве комментария.