Ivan
Ну там выберите C++, скопируйте свой код и запустите
Aidar
Ты не можешь так сделать дальше что?
Aidar
Юзай обвчный
Aidar
И пиши его уже на выходе в югик
Aidar
В чем проблема
Constantine
А если функция до return бросит иксепшн
Ivan
Ну с одним знаком, то вы сделали
Aidar
Из за этого вводить какую-то дичь с меняющимися в рантайме квалификаторами кощунство
Aidar
А если функция до return бросит иксепшн
А что она должна тут делать тогда?
Aidar
У тебя деструктора а нет
Anonymous
Всем алоха
Constantine
Не в рантайме, все мои квалификаторы работают только в компильтайме
Aidar
Конструктора нет
Ivan
Пришлите код
Constantine
А что она должна тут делать тогда?
В случае с квалификаторами затребовать деструктор без квалификатора енжуредналл
Anonymous
/stat@combot
Ivan
Ну как я тебе помогу?
Aidar
В зависимости от данных чтоь
Aidar
Это уже не компильтайм
Aidar
Ну смотри эксепшн дальше квалификатор меняется?
Constantine
Квалификаторы ты как выставлять собрался
Я собираюсь указать, что конструктор юникптр меняет квалификатор принятой ссылки на энжуредналл
Constantine
Любое объединение ветвления убирает все не общие квалификаторы
Aidar
Что происходить при эксепшне должно
Constantine
Все штуки с исключениями по сути ветвления
Anonymous
А кто можешь проконсультировать на тему visual studio и стандарта?
Aidar
Внутри ветвлений разные квалификаторы?
Constantine
Могут быть разные в ветвлениях
Aidar
Но если есть ветка с удалением заюначит там должен быть деструктор опять
Constantine
Да
Aidar
Ну и
Constantine
Но если я гарантирую ноуэксепт от получения параметра до ретерна мувом
Constantine
Ветвлений нет
Anonymous
Господа
Constantine
И я только что формально доказал, что я никогда не буду удалять юник птр
Aidar
Но этот инстанс продублировался где-то в ветвлениях где они есть
Aidar
С разными квалификаторами входа
Constantine
Если ветвления есть нужны пруфы всех веток, разумеется
Constantine
Но код получить юник птр на инкомплит тайп и тут же вернуть его мувом будет работать
Aidar
А при входе в ветвление проверка в рантайме?
Aidar
Если нет то я нихрена не понял если да то это кастом можно заменить
Constantine
А при входе в ветвление проверка в рантайме?
Нет ни одной проверки в рантайме от компилятора, например
Constantine
Есть qualifier_ensure_or_terminate() явная проверка, вызывающая терминейт
Constantine
При провале
Aidar
Тогда там вообще все типами заменяется насколько я понял
Aidar
Без кастов
Constantine
Нет, это нельзя сделать типами без кастов, потому что ты никогда не сможешь написать тот самый пример с юник поинтерами)
Aidar
Типом с null и nonnull
Aidar
Сможешь
Constantine
Как?
Aidar
2 функции/шаблон
Constantine
Угу, но нужен еще рекаст ссылки
Aidar
Не нужен
Aidar
Ты никогда просто не теряй эту инфу о типах и все
Constantine
Как? Я получил класс, который ведет себя как нотналл юник птр, аргмуентом функции
Constantine
Мне нужен виртуальный делитер как минимум
Aidar
И
Constantine
И теперь эксепшон сейфети
Constantine
Как я его добьюсь?
Aidar
Ты не можешь юзать конструктор не зная про деструктор
Aidar
Встречный вопрос как ты этого добъешься в компильтайме я не понял
Constantine
Угу, то есть удалять я все время мог через делитер на супербейзкласс, ладно
Constantine
В компильтайме без модификации компилятора я не могу модифицировать квалификаторы
Aidar
С модификацией любой
Constantine
С модификацией у меня у переменной тупо список квалификаторов
Aidar
Эксепшн это рантайм
Constantine
Который влияет на разрешение перегрузок
Aidar
Это в любом случае проверка в рантайме
Aidar
Это не компильтайм
Constantine
Нет, это статическая информация, слабая часть типа переменной
Aidar
Нет
Constantine
Она может быть модифицирована оператором
Aidar
Блин напиши псевдокод
Constantine
Короче компилятору говорят, что у юникптр есть квалификатор энжуредналл, он верен в случае нулевого внутреннего указателя, мувконструктор модифицирует принятую ссылку, дописывая энжуредналл, есть перегруженная версия деструктора для энжуредналл, которая не делает ничего
Aidar
Как узнать что указатель нулевой
Constantine
И стд::мув не меняет квалификаторы
Aidar
Блин опять не туда
Aidar
С эксепшнами то чтт
Aidar
Что происходит при эксепшне
Constantine
Теперь компилируется функция, которая принимает аргумент и возвращает мувом. Мув придется делать встроенным чтобы было все ок, потому как компилятор должен протащить имя переменной, или тут нужен какой-то чит. Вызывается конструктор перемещения, его параметру довешивают энжуредналл, в итоге на выходе функции параметр функции энжуредналл и вызван деструктор делать ничего