MacOS XCode 16 нарушает динамическое приведение типов «final», определенных в общей библиотеке.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 MacOS XCode 16 нарушает динамическое приведение типов «final», определенных в общей библиотеке.

Сообщение Anonymous »

Предположим, у нас есть общая библиотека со следующим очень простым Type.h:

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

struct Base
{
virtual ~Base() = default;
};

struct Derived final : Base
{
Derived();
};
, Type.cpp:

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

#include "Type.h"

Derived::Derived() = default;
и программа main.cpp:

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

#include "Type.h"

int main()
{
std::shared_ptr pr;
pr = std::make_shared();

auto dyncast = dynamic_cast(pr.get());
if (dyncast) {
std::cout  clang++ -o out main.cpp -L. -lOut -O2 -std=gnu++20
> ./out
По какой-то причине в XCode 16 программа не может выполнить динамическое_каст и выводит строку с ошибкой.
Следующее «исправляет» проблему :
  • удаление окончательного из объявления Derived
  • встраивание производного конструктора
  • добавление другого виртуального участника функцию для производной
  • сборки без -O2
  • понижения XCode до версии 15
Насколько я понимаю, здесь происходит какая-то оптимизация, приводящая к сбою динамического_cast, но, по моему мнению, это похоже на ошибку, и огромную. Я что-то упустил?
Есть ли какой-нибудь обходной путь/флаг компилятора, чтобы это заработало?
Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/791 ... ed-library
Ответить

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

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

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

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

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