Vsevolod
https://godbolt.org/g/jRNHJX
Alexander "SonnySlave"
🐙 Antony
Должно уметь
Alexander "SonnySlave"
Должно уметь
а это не запрещено разве? так как non-trivial ctro and dtor
Alexander "SonnySlave"
по моим тестам оно не выкидывается
Alexander "SonnySlave"
Должно уметь
https://godbolt.org/g/dVavLz
Alexander "SonnySlave"
Alexander "SonnySlave"
с выделением памяти, поэтому и низя выкинуть
Alexander "SonnySlave"
если ты сделаешь тоже самое со std::string
Alexander "SonnySlave"
то он выкинется, ибо SSO
Alexander "SonnySlave"
Alexander "SonnySlave"
поэтому и кастую @antoshkka
Anatoly
Berkus
Alexander "SonnySlave"
Alexander "SonnySlave"
а не внутри вектора
Alexander "SonnySlave"
Anatoly
Alexander "SonnySlave"
Alexander "SonnySlave"
про кастомные типы и так всё ясно
Anatoly
ну, то есть ты предлагает для фундаметельных типов использовать это
Alexander "SonnySlave"
типы с trivial ctor
Anatoly
ну, предложими им
Berkus
он выкидывает просто new
да, но вообще странно - если он вызов конструктора вектора ВЫКИНУЛ то можно и окружающий new выкинуть же
Berkus
это бага
Alexander "SonnySlave"
окей, вечером зарепорчу им. а пока у меня зачёт по политологии
🐙 Antony
а не внутри вектора
Оно упирается вот в эту багу: https://bugs.llvm.org/show_bug.cgi?id=34797
Berkus
похоже на то да
🐙 Antony
Там разадресация проаллоцированного массива убивает оптимизацию
Constantine
сейчас чуть более точный пример напишу
Constantine
#include <memory>
struct stored {
int x = 42;
stored() = default;
stored(stored &&) = delete;
stored(stored const&) = delete;
};
struct inner {
stored x;
};
struct some {
inner inner_;
inner const&& get_inner() const&& {
return std::move(inner_);
}
};
int f() {
auto & ref = some().get_inner().x; //можно как-нибудь поломать эту строчку?
return ref.x;
}
Constantine
мне нужно сделать функцию, которая вернет структуру таким образом, что ее поле не может быть запомнено через auto&
Constantine
я правильно понимаю, что что бы я не делал, мне все равно разрешат прострелить ногу из-за возможности приведения всего, что угодно, к const& ?
Constantine
@zamazan4ik а как планируется пофиксить, что если [[pack]] меняет порядок элементов структуры, то экземпляры структуры с одинаковым объявлением перестают быть совместимы сами с собой? то есть каким вообще образом гарантировать, что эта структура одинаковая в разных TU?
Berkus
Alexander "SonnySlave"
Alexander "SonnySlave"
Ситуация ровно такая же будет, как и сейчас
Berkus
Constantine
http://en.cppreference.com/w/cpp/language/data_members#Standard_layout
Constantine
нашел
Constantine
@zamazan4ik вот с этой фигней что делать?
Constantine
это на самом деле очень сильная гарантия, по сути запрещающая компилятору переразмещать поля структуры
Александр
https://wandbox.org/permlink/AXNXryuWTpQakneK
Кто-нибудь был в курсе, что можно делать так?
Constantine
только не перегрузка ->* пожалуйтса
Constantine
вроде это не разрешено стандартом, нет?)
Roman
жесть!
Александр
про стандарт не знаю
Vsevolod
так скоро до окамля с хаскилем дойдет с их |:> и прочими закорючками
Berkus
Constantine
о, кажись, телега багает если пытаться сделать сначала reply а потом forward в этот реплай)
Constantine
О! Придумал отличную идею. Нужно ввести в С++ новый operator *|* который может быть применен на переменную текущего scope, работает как std::move и запрещает последующее использование этой переменной
Constantine
кодовое название "оператор пнх" (это шютка)
Berkus
Constantine
Константин изобретает Раст
Мне не нравится идея раста полного отказа от расширяемого динамического полиморфизма (как я понял)
Berkus
Berkus
трейтсы вполне себе динамический полиморфизм юзают, даже vtbl есть
Constantine
То есть я обязан предоставить список всех потомков
Constantine
хотя может быть я ошибаюсь и какая-нибудь магия вроде разделения полиморфных и неполиморфных ссылок решает проблему
Berkus
я всё равно ничего не понял из того что ты сказал, так что будем считать эту проблему надуманной
Constantine
Constantine
Ты просто не можешь ну никак статически проверить, что это объект допустимого типа для поля value
Berkus
Ну я ж говорил что надуманная проблема
Constantine
Динамический полиморфизм справляется, если не определен один тип. Если в выражении не определено два типа (читай operator ==) то динамический полиморфизм фейлит
Alexander "SonnySlave"
melvin
melvin
срочно несите в расточат
Evgenii
compile-time raytracer
Maxim
а что ещё turing-complete, кроме сишного препроцессора и темплейтов?
Alexander "SonnySlave"
Maxim
а, ок %)
Александр
kitsu
препроцессор же не полон по тьюрингу, не?
Maxim
http://www.ioccc.org/2001/herrmann1.hint