ttldtor
суть правильных языков
Dr. Friedrich
Друзья, преимущества хаскеля вы можете обсудить в хаскелечате.
Constantine
тогда можно доказательство, что код на хаскелле занимает в объеме в 100 раз меньше, чем аналогичный на плюсах
Dmitry
Constantine
и тогда 1М кода на хаскеле
Roman
Dr. Friedrich
Roman
Roman
Из Хаскельчата
Constantine
в любом случае, здесь действительно чат по плюсам, и я не понимаю, в чем сложность модификации аналога сv-qualifier для типа уже объявленной переменной (с точки зрения компилятора)
Constantine
особенно если добавить условие, что на выходе из блока сбрасываются все не общие
ttldtor
Видимо, я не понял всей глубины проблемы, чтобы дать хоть какой-то вариант идиоматичного воркэраунда.
Constantine
Constantine
в C++ принципиально не существует кода, который для объявленной в блоке переменной типа std::unique_ptr<SomeType> не инстанцирует вызов deleter в конце этого блока
Constantine
в частности, поэтому я не могу написать следующую функцию
std::unique_ptr<IncompleteType> JustReturn(std::unique_ptr<IncompleteType> input){
return std::move(input);
}
Arseny
Nikita
Constantine
И не может
Constantine
Он обязан вызвать деструктор
Arseny
Он обязан вызвать деструктор unique_ptr, который может заинлайниться, как пустой
Nikita
Вызвать-то может, но он может значение проследить и ветку в деструкторе отрубить
Constantine
Это значит, что будет по умолчанию инстанцирован delete для IncompleteType*
Arseny
Arseny
А, понял
Constantine
Это доказательство того, что требуемая логика не может быть реализована без модификации компилятора
Aidar
Aidar
Не хочешь вызов деструктора зачем тебе умный указатель
Aidar
Не понимаю смысла user defined qualifiers
Aidar
У нас же есть шаблонные параметры
MrSmith
Вроде гдет в последних стандартах видел delete defaulte и тд
MrSmith
Для конструкторов класса вроде тоже можно
Aidar
Это си++11
MrSmith
А у нас снвоа некромантия?
Aidar
Нет тут ваще дикая упоротостт
Aidar
Чтобы понять нужно читать сначала
MrSmith
Че он хочет по человечески кто понял раскидайте
Aidar
Он хочет инкомплит тип сунуть в юник поинтер
Aidar
Чтобы деструктор не вызывался
MrSmith
А зачем он это хочет?
MrSmith
Похоже на какой-то грязный хако-велосипед
Dmitry
Aidar
Форвард декларейшн
Dmitry
как можно инкомплит передать в шабон в принципе...
MrSmith
Как указатель имхо
MrSmith
Правда есть проблемы....
Aidar
Varg
Evgenii
Varg
я не говорю, что конкретно этот случай нормальный, я про общий подход
Dmitry
пока подобные хаки возможны, не нужно внедрять альтернативы)
MrSmith
Varg
мне это не надо
Varg
лично у меня и так все хорошо :)
Dmitry
низя
Varg
можно
Dmitry
как
Varg
у тебя там ошибка синтаксиса
Varg
ты не указал переменную
Varg
название
Anatoly
как
template<typename T>
struct foo {
T* p;
};
class incomplete;
int main()
{
foo<incomplete> f;
}
Varg
Value<Incomplete*> pp;
Varg
должно быть так
Varg
а у тебя было Value<Incomplete*>;
Dmitry
Dmitry
вон чо
Constantine
Я хочу не просто чтобы удаление не вызвалось, я хочу перегрузки по user defined qualifiers
Dmitry
если можно задетектить инкомплит по sfinae, то не вижу проблемы
Aidar
Aidar
То же самое
Constantine
Нельзя это реализовать шаблонами, я же запруфал
Aidar
Чем запруфал
Constantine
Нужно обязательно иметь возможность изменять квалификатор типа после объявления переменной
Aidar
А ты можешь так сделать с обычными св?
Constantine
Нет