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 программа не выполняет динамическое приведение и выводит строку с ошибкой.
Следующее «исправляет» проблему:
  • удаление Final из объявления Derived
  • встраивание Derived конструктор
  • добавление другой виртуальной функции-члена в Derived
  • построение без -O2
  • понижение XCode до версии 15
Насколько я понимаю, здесь происходит своего рода оптимизация, в результате чего динамический_cast неудачно, но, по моему мнению, это похоже на ошибку, причем огромную. Я что-то упустил?
Есть ли какой-нибудь обходной путь/флаг компилятора, чтобы это заработало?
Спасибо.

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

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

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

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

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

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