У меня есть модуль C++, который импортирует std:
// MyModule.ixx
export module MyModule;
import std;
export namespace MyNamespace {
class MyClass : std::monostate {};
}
Я хочу импортировать модуль в другой файл:
// main.cpp
#include <QtCore/QDebug>
import MyModule;
auto main(int argc, char **argv) -> int {
qDebug() << "test";
MyNamespace::MyClass A;
}
Это дает ошибку компиляции:
main.cpp(7,25): fatal error C1117: unrecoverable error importing module 'std': symbol 'monostate' has already been defined
Если я уберу #include <QtCore/QDebug> и qDebug() << "test";, программа скомпилируется нормально. Таким образом, кажется, что #include <QtCore/QDebug> косвенно включает std::monostate и конфликтует с импортированным import std; в MyModule.ixx.
Как я могу решить эту проблему? Разве я не могу import std когда где-то еще в моей программе стандартная библиотека #included?
@dalfaB Вы имеете в виду, что выполнение import std; в начале main.cpp решило проблему?





Я решил это, импортировав <variant> вместо std:
// MyModule.ixx
export module MyModule;
import <variant>;
export namespace MyNamespace {
class MyClass : std::monostate {};
}
Я пробовал то же самое на MSVC, он выдает внутреннюю ошибку компилятора по спецификации
constexpr! начиная сimport std;устраняет проблему в моем коде.