170 похожих чатов

Изза того что MSVC манглит struct/class имена по разному, при

компиляции объектов которые декларированы по разному он продюсит ворнинг C4099.
Есть что-то в стандарте, что уравнивает семантику объявлений struct ForwardDeclaration; и class ForwardDeclaration; или мсвц в полном праве полагаться что это разные объявления?
И если семантика разная, то никто не хочет это починить с whatever ForwardDeclaration;? Еще бы и тайп альясы туда присобачить.

32 ответов

50 просмотров

Зачем по разному декларировать один и тот же тип

вроде как в стандарте есть, что struct/class идентичны

Aleksei Kuznetsov-Kuznetsov Автор вопроса
Denis P
Зачем по разному декларировать один и тот же тип

Потому что ты не помнишь. Потому что поменяли оригинальный тип, но не форварды

Aleksei Kuznetsov-Kuznetsov Автор вопроса
Denis P
Ну тогда ссзб

Это стреляет неприятно, когда у вас меняется тип в фреймворке, а клиенты живут в своих проектах и им надо идти менять форварды. Чинится тем что многие делают forward.hpp с форвардами, заодно и со всеми тайпалиасами, но это костыль, который не хочется делать

Aleksei Kuznetsov Kuznetsov
Это стреляет неприятно, когда у вас меняется тип в...

не меняйте так публичное апи) внезапная идея переделать class на struct кажется немного странной

Феномен Баадера-Майнхоф, никогда такого не ловил и вдруг перепутал struct на class в forward declaration, все скомпилили а в msvc unresolved external 😂

Мс-вс поступает абсолютно корректно. Манглинг не является частью стандарта и отдан на откуп имплементации. Имплементация Мс-вс максимально строгая. В манглинг включается не только class/struct, но и retval и public/private и static и .. я хз ещё что. Чуть сбаловался - давай разбирайся.

Int Unsigned
Мс-вс поступает абсолютно корректно. Манглинг не я...

Разобраться бывает сложно :) Оно на этапе компиляции видя что class/struct расходятся не сказало ничего. Более того, оно выдумало несуществующую функцию class T& foo() (хотя она struct T& foo()) и объявило её unresolved.

Aleksei Kuznetsov-Kuznetsov Автор вопроса
Int Unsigned
Мс-вс поступает абсолютно корректно. Манглинг не я...

Выглядит как довольно бессмысленный механизм при работе с форвардами. Зачем включать в манглтинг стракт или класс не очень ясно. Я не вижу какую фичу это добавляет, но вижу просто ещё одно место где можно ошибиться.

но класс и стракт не идентичны, у них есть различия) Никто и не говорил, что их можно вместо друг друга использовать

Aleksei Kuznetsov-Kuznetsov Автор вопроса
Aniki Hi$ok@ 🌈 Z 🐀
но класс и стракт не идентичны, у них есть различи...

для форварда это не имеет значения, что это дает при манглинге тоже неясно

Aleksei Kuznetsov Kuznetsov
для форварда это не имеет значения, что это дает п...

ты сам написал, что компилятор ворнинг кидает, не знает такого класса/структуры

Aleksei Kuznetsov-Kuznetsov Автор вопроса
Aniki Hi$ok@ 🌈 Z 🐀
ты сам написал, что компилятор ворнинг кидает, не ...

так делает только мсвц, остальные компиляторы нормально работают

Aleksei Kuznetsov Kuznetsov
так делает только мсвц, остальные компиляторы норм...

ты не должен писать код, который один из 3х компиляторов не собирает (или кидает явный ворнинг), структура и класс - не одно и тоже, какая может быть причина вместо class написать в форварде struct (и наоборот)

Aleksei Kuznetsov-Kuznetsov Автор вопроса
Aniki Hi$ok@ 🌈 Z 🐀
ты не должен писать код, который один из 3х компил...

я выше приводил пример. У вас есть фреймворк, который поменял класс на стракт, есть клиенты, которые не у вас в компании и потребляют фреймворк, у них форварды в коде старые. Теперь у них очень обскурно все ломается

Aleksei Kuznetsov Kuznetsov
я выше приводил пример. У вас есть фреймворк, кото...

код не твой и беда не твоя, что ломается. Ты никаких законов не нарушаешь, как разработчик фреймворка

Aleksei Kuznetsov-Kuznetsov Автор вопроса
Александр Водянников
Вот и не надо и нельзя так делать.

Не надо что делать? Форварды писать? Менять апи? Тратить время на фикс форвардов, потому что что? Есть костыльное решение для этого это держать свои форварды все в отдельном хедере и поставлять его тоже, но я не вижу большой причины для существования таких костылей. Чем может навредить forward Name; в декларации, вместо class/struct Name;? Ну кроме того что мсвц придется поменять как они манглят имена и сломать аби :D

Aleksei Kuznetsov Kuznetsov
Не надо что делать? Форварды писать? Менять апи? Т...

не надо форварды писать на код, за которым даже не проверяешь при апдейте не изменилось ли там что на этот счёт, это грабли те ещё даже без манглинга если нужны форварды, но самому следить не получается, попроси апстрим фреймворка, чтобы они у себя сделали хедер с форвардами и поддерживали его не нравится, что стандарт допускает разный манглинг для struct и class, напиши пропозал в стандарт, полушай/почитай что тебе там ответят

Aleksei Kuznetsov-Kuznetsov Автор вопроса
Гражданин Котейко
не надо форварды писать на код, за которым даже не...

я и есть апстрим фреймворка и поддерживаю хедер с форвардами и не хочу этого делать

Aleksei Kuznetsov Kuznetsov
я выше приводил пример. У вас есть фреймворк, кото...

А почему кто-то решил, что ломать abi библиотеки и скидывать вину на манглинг – норма? С таким же успехом можно было переименовать классы, сломав код пользователей

Aleksei Kuznetsov-Kuznetsov Автор вопроса
Ofee Oficsu
А почему кто-то решил, что ломать abi библиотеки и...

Потому что поддерживать аби библиотеки которая собирается из сорцов и наружу не торчит не очень нужно. Вы же понимаете что ваше сравнение с именами некорректно?

Aleksei Kuznetsov Kuznetsov
Потому что поддерживать аби библиотеки которая соб...

Ну, если мы заменим abi на api – ничего не поменяется в данном примере Автор библиотеки принял решение сломать api. Жалуемся на компилятор Должны ли эти изменения были ломать api – это уже отдельный вопрос. Но вы уж или принимайте правила всех платформ, которые поддерживаете, или не поддерживайте ту, которая вас не устроила

Ofee Oficsu
Ну, если мы заменим abi на api – ничего не поменяе...

Ну так можно просто не использовать его либу. А если хочется фиксить ее проблемы то использовать

Ofee Oficsu
Ну, если мы заменим abi на api – ничего не поменяе...

Вас же не заставляют насильно ее юзать

Polina 💓
Ну так можно просто не использовать его либу. А ес...

Ну, так и есть. Одно другому не сильно противоречит

Aleksei Kuznetsov-Kuznetsov Автор вопроса

Давайте ни на что не жаловаться и не развиваться! Вы знаете зачем в замангленном имени мсвц использует структ? Для чего это нужно?

Aleksei Kuznetsov Kuznetsov
Давайте ни на что не жаловаться и не развиваться! ...

>> Давайте ни на что не жаловаться Попробуйте пожаловаться на это в их багтрекер. Правда, боюсь, что попытка починить проблему окажется ещё более серьезным ломающим изменением и для api, и для abi всех пользователей платформы

Aleksei Kuznetsov Kuznetsov
Давайте ни на что не жаловаться и не развиваться! ...

сейчас это не важно, оно уже так и менять никто не будет

Похожие вопросы

Обсуждают сегодня

Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
я так понимаю, я так подозреваю, что создание такого плагина для человека, кто умеет писать плагины для делфи потребует минут 5-10 времени. но это мое подозрение. хотелось бы ...
Kraszx
7
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Коллеги, добрый вечер. Создаю коллекцию от TFPGMap, ключ - перечисление, значение - целое. Нужно отсортировать коллекцию по значению. Как это можно сделать?
Kirill Filippenok
11
Скажи а ты когда этот канал создавал ты уже дельфи не любил, или это со временем пришло?
Роман Лях (rgreat)
18
Привет, такой вопросик появился кажется ли вам что Rust слишком сложный/строгий для высокоуровневого программирования и слишком "безопасный"/строгий для низкоуровневого?
Крокант
10
Всем привет! Использую кастомное модальное диалоговое окошко, все по классике - mrOK, mrCancel как ModalResult. Однако есть нюанс - в главной форме есть универсальный обработч...
Олег Гранишевский
20
Карта сайта