0 / 0 / 0
Регистрация: 27.02.2023
Сообщений: 27

Не компилируется код C++23 с модулями

14.01.2024, 11:39. Показов 5439. Ответов 7
Метки c++ (Все метки)

Студворк — интернет-сервис помощи студентам
Почему не компилируется этот код, использующий модули C++20?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import std;
 
std::generator<int> fibonacci()
{
    int a = 0;
    int b = 1;
    co_yield a;
    while (true)
        co_yield a = std::exchange(b, a + b);
}
 
int main()
{
    std::cout << fibanocci() << std::endl;
 
    return 0;
}
В cmake стандарт языка и ключи компиляции указаны так:

Code
1
2
3
4
5
6
7
8
9
10
cmake_minimum_required(VERSION 3.5)
 
project(coro LANGUAGES CXX)
 
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
 
add_executable(coro main.cpp)
 
target_compile_options(coro PRIVATE -fcoroutines -fmodules-ts)
Ошибки такие:
Code
1
2
error: Invalid value 'gnu++23' in '-std=gnu++23'
error: Module 'std' not found
Версия GCC 13 на Arch Linux
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.01.2024, 11:39
Ответы с готовыми решениями:

В формате .cpp код компилируется, а в .c не компилируется
1).Подскажите почему в формате .cpp код компилируется, а в .c не компилируется 2). Как сделать так, чтобы компилировалось в .c? ...

Можно ли добавить музыку/мелодию в код в паскале, сделанный модулями?
к примеру к такому, тут палочки об бараны играют, звук играющего барабана добавить //код на паскальабс uses graphabc; var...

Почему в Dev-C++ код не компилируется, если исходный код будет с расширением ".c"?
Почему в Dev-C++ код не компилируется, если исходный код будет с расширением &quot;.c&quot; , а с &quot;.cpp&quot; работает прекрасно? В Википедии...

7
Модератор
Эксперт Java
 Аватар для alecss131
2881 / 1385 / 411
Регистрация: 11.08.2017
Сообщений: 4,414
Записей в блоге: 2
14.01.2024, 13:36
Цитата Сообщение от AngelicQuasar Посмотреть сообщение
cmake
Модули не поддерживает
1
0 / 0 / 0
Регистрация: 27.02.2023
Сообщений: 27
14.01.2024, 13:44  [ТС]
А qmake поддерживает модули? Попробовал сейчас собрать этот код qmake'ом - еще хуже все
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
14.01.2024, 15:26
AngelicQuasar, ИМХО нужна версия cmake поновее.
Для того, чтобы 23 стандарт поддерживать, нужа версия 3.20 или новее. А модули поддерживаются с версии 3.28.
1
0 / 0 / 0
Регистрация: 27.02.2023
Сообщений: 27
14.01.2024, 17:51  [ТС]
У меня cmake --version выдает версию 3.28.1

При компиляции выдается ошибка error: Module 'std' not found
То есть cmake понимает, что это модули, но почему-то не находит модуль std. В студии такой проблемы нет, странно.
0
Модератор
Эксперт Java
 Аватар для alecss131
2881 / 1385 / 411
Регистрация: 11.08.2017
Сообщений: 4,414
Записей в блоге: 2
14.01.2024, 21:18
DrOffset, Спасибо за информацию, а то не знал. Знал что только с 25 экспериментальная поддержка
AngelicQuasar, А вам вот ответ на ваш вопрос из Release Notes 28 версии
C++ 20 named modules are now supported by Ninja Generators and Visual Studio Generators for VS 2022 and newer, in combination with the MSVC 14.34 toolset (provided with VS 17.4) and newer, LLVM/Clang 16.0 and newer, and GCC 14 (after the 2023-09-20 daily bump) and newer. See cmake-cxxmodules(7) for details.
Добавлено через 1 минуту
Осталось найти пример использования, причем не стандартных, а своих
А в студии модули для стандартной библиотеки в экспериментальном состоянии

Добавлено через 2 минуты
AngelicQuasar, И еще немного инфы из доков
Generator Support

The list of generators which support scanning sources for C++ modules include:

Ninja

Ninja Multi-Config

Visual Studio 17 2022
И второе
Limitations

There are a number of known limitations of the current C++ module support in CMake. This does not document known limitations or bugs in compilers as these can change over time.

For all generators:

Header units are not supported.

No builtin support for import std; or other compiler-provided modules.

For the Ninja Generators:

ninja 1.11 or newer is required.

For the Visual Studio Generators:

Only Visual Studio 2022 and MSVC toolsets 14.34 (Visual Studio 17.4) and newer.

No support for exporting or installing BMI or module information.

No support for compiling BMIs from IMPORTED targets with C++ modules.

No diagnosis of using modules provided by PRIVATE sources from PUBLIC module sources.
0
Почетный модератор
 Аватар для Humanoid
11559 / 4353 / 453
Регистрация: 12.06.2008
Сообщений: 12,455
15.01.2024, 01:52
Разве это cmake выдаёт ошибку? Мне кажется, что cmake отработал нормально, а ошибку выдаёт компилятор.
Жалобы на std, скорее всего, связаны с тем, что нет ни одного include. Попробуйте в начало cpp-файла добавить
C++
1
2
3
#include <generator>
#include <iostream>
#include <utility>
А вот почему компилятор не понял "-std=gnu++23" не знаю. У меня с GCC 13.2.1 принимает эту опцию.
Убедитесь в том, что у вас 13 версия:
Bash
1
g++ --version
И можно посмотреть, какой компилятор использует cmake, если запустить "ccmake ." и там нажать T (потом Q для выхода).
0
Модератор
Эксперт Java
 Аватар для alecss131
2881 / 1385 / 411
Регистрация: 11.08.2017
Сообщений: 4,414
Записей в блоге: 2
15.01.2024, 11:32
Цитата Сообщение от Humanoid Посмотреть сообщение
Жалобы на std, скорее всего, связаны с тем, что нет ни одного include
Как бы то что использовано замена стандартным иклудам.
Только вот про тонкости использования модулей с cmake написал выше.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.01.2024, 11:32
Помогаю со студенческими работами здесь

Не компилируется код
Есть код на подобие такого: template&lt;int a&gt; class A { public: static const int x1 = B&lt;a,1&gt;::x2; }; template&lt;int a, int...

Не компилируется код
была старая банка там все норм тянуло, работал на IDEA, сейчас на новом компе сижу, установил jdk-7u25-windows-x64 как пологается поставил...

Не компилируется код
class Animal { String name; public String getName() { return name; } public Animal(String theName) { ...

Не компилируется код
В чём тут может быть проблема? Постоянно выскакивают ошибки в locale().cpp #include &quot;stdafx.h&quot; #include &lt;conio.h&gt; ...

Не компилируется код
я написал код проверял не компелирует почему-то пользуюсь dev c++ пишет проект или исходный файл не скомпелирован вот код #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru