Используйте std::regex_search, вызываемый из модуляC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Используйте std::regex_search, вызываемый из модуля

Сообщение Anonymous »

Я столкнулся со странной проблемой. Я создал модуль C++20 следующего содержания (файл Module.cppm):

Код: Выделить всё

module;
#include 
#include 

export module foo;

export namespace bar {
using std::regex;
using std::smatch;
using std::regex_search;
using std::string;
}
Я использую этот модуль в следующем коде (файл main.cpp):

Код: Выделить всё

import foo;

int main() {
bar::regex  regex;
bar::smatch match;
bar::string s;
bar::regex_search(s, match, regex);
}
Мой файл CMakeLists.txt выглядит так:

Код: Выделить всё

cmake_minimum_required(VERSION 4.0.0)
set(CMAKE_CXX_STANDARD 23)

project(cpptest)

add_library(module STATIC)
target_sources(module PUBLIC FILE_SET CXX_MODULES FILES module.cppm)

add_executable(cpptest main.cpp)
target_link_libraries(cpptest module)
При попытке сборки с помощью следующих команд:

Код: Выделить всё

cmake -B build -G Ninja
cmake --build ./build/
Я получаю следующие ошибки:

Код: Выделить всё

/usr/local/gcc-15.1/include/c++/15/bits/regex.tcc:56:16: error: ‘std::__cxx11::basic_regex::_AutomatonPtr std::__cxx11::basic_regex::_M_automaton’ is private within this context
56 | if (__re._M_automaton == nullptr)
| ~~~~~^~~~~~~~~~~~
/usr/local/gcc-15.1/include/c++/15/bits/regex.h:848:25: note: declared private here
848 | _AutomatonPtr _M_automaton;
Мой компилятор — GCC 15.1, cmake 4.0.3. Вот воспроизведение этого примера на godbolt. Если вы скомпилируете тот же пример в Clang, проблем не возникнет.
Есть ли быстрое решение этой проблемы? Знает ли GCC об этой проблеме?

Подробнее здесь: https://stackoverflow.com/questions/797 ... rom-module
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»