Deleted Account
если по huitka удалить?
да даже если через sp2
Pepe 🐸
да даже если через sp2
а ну да, останется dangling pointer
Anatoliy
Угу, гениальная идиома std::unique_ptr<int> supasmart_function(std::unique_ptr<int> & ptr) { return std::move(ptr); }
Ирония иронией, однако, ты сам не догадался, что так можно. И, когда бы я смотрел примеры чужого кода, ни разу не видел, чтобы кто-то тоже до этого дошёл. А это значит нет понимания что при выводе типа для T в template< typename T > void f(T &&); например для разных категорий значения int: T может быть либо const int &, либо int &, либо int, либо const int, но никак не int &&. Учитывая правила сворачивания ссылок можно вывести эту идиому (а это идиома по всем признакам, можешь даже не иронизировать).
Эдвард
Друзья, кто-нибудь знает, что делает виндовый pe загрузчик с циклическими зависимостями в таблице импорта?
Andrey
обрабатывает неким способом, зависящим от версии операционной системы.
Andrey
приложение загрузиться, но инициализация dll'ек может быть в разных порядках
Anatoliy
я надеюсь ты троллишь)
серьёзен. почему ты так думаешь?
Nikita
потому что при автовыводе параметра шаблона 1. int никогда не будет 2. int&& запросто может быть
Anatoliy
при выводе типа (это значит, что ты его явно не указываешь при инстанцировании шаблонной функции, если не знал) у тебя не может быть нарушен static_assert(!std::is_rvalue_reference< T >::value) в рассматриваемом выше случае
Anatoliy
я ж говорю, что мало кто в этой теме шарит
Nikita
а зачем тогда нужно правило сжатия T&& && -> T&& ?
Nikita
Nikita
век живи век учись
Ender
Подскажите плиз почему base64encode на C и base64.StdEncoding.EncodeToString на Go дают разные результаты?
Разные реализации, ну и возможно разный порядок бит/байт
Ender
Ещё бывает например, там где base64 НА САМОМ ДЕЛЕ оказывается radix-64
Anatoliy
не заходит
Anatoliy
Россию похоже от интернета отключили
Constantine
у меня работает все
Constantine
а, хм
Anatoliy
можешь на wandbox.org?
Constantine
работало)))
Constantine
там простой пример
Deleted Account
не заходит
похоже вирус
Anatoliy
это ссанкции
Anatoliy
новый виток
Constantine
примерно такой auto f() { auto p = std::make_unique<int>(42); auto l1 = /*lambda*/; return wrap(l1); } int main() { assert(*f()() == 42); }
Deleted Account
новый виток
https://godbolt.org/g/Am2cDU
Anatoliy
пфф). похоже ты не понимаешь как это работает?
Anatoliy
я выше объяснил, что для lvalue у тебя будет lvalue reference
Constantine
похоже ты не понимаешь, как надо форвардить и писать врапперы
Anatoliy
ты ведь передаёшь ссылку
Constantine
ну да, ты написал wrap как view объект
Anatoliy
нет. это умный wrapper
Constantine
нет, это view объект
Constantine
которому забыли написать L && l;
Anatoliy
если передавать невременный объект, он его дополнительно не сохраняет
Constantine
а, ну ок
Anatoliy
а если временный, то конечно он его перемещает себе
Constantine
угу
Anatoliy
dangling reference - это на твоей стороне вина
Constantine
хм... нет
Anatoliy
ну если совсем хочешь красоту, то сделай std::remove_reference_t< L > у поля класса
Constantine
пушо метод называется wrap
Constantine
std::decay_t
Constantine
и все сломается
Anatoliy
точнее не красоту, а кастомное поведение
Constantine
https://godbolt.org/g/Vj6cKb
Constantine
ой мы криво форвардим
Anatoliy
а где форвард?
Constantine
а, нет
Constantine
мы просто по-извращенски форвардим
Anatoliy
а почему ты не хочешь объект со стека переместить вовнутрь моего умного враппера?
Anatoliy
return wrap(l1); -> return wrap(std::move(l1));
Anatoliy
так по выходу из функции он где должен существовать?
Anatoliy
нигде? ну вот и получаешь что сам написал))
Deleted Account
так по выходу из функции он где должен существовать?
если должен снаружи существовать то пусть сразу на куче делается
Anatoliy
да. ты властен это сделать
Constantine
а почему ты не хочешь объект со стека переместить вовнутрь моего умного враппера?
потому что я не хочу && преобразовывать в & нигде и никогда
Anatoliy
ты хочешь херни, и наверное сам себе противоречишь, но у меня нет желания производить декомпозицию твоих хотелок вплоть до пары отрицающих друг друга твоих утверждений
Constantine
ладно короче, пиши как хочешь
Deleted Account
я бы хотел писать правильно но так и не понял в чём тут счас проблемка
Deleted Account
я бы тоже не хотел && преобразовывать в & нигде и никогда
Constantine
если не хочешь думать, можешь мне не верить, что надо L&& принимать в конструктор wrap
Anatoliy
тебе не охота явно указывать, что ты хочешь сохранить объект внутри? как компилятор сам догадается? телепаты не приехали
Constantine
а не форвардить L& через forward<L>
Anatoliy
https://godbolt.org/g/CP14uu почему ты старую версию используешь? она wrap(wrap()) не принимает
Anatoliy
если не хочешь думать, можешь мне не верить, что надо L&& принимать в конструктор wrap
Почитай выше. Я другому человеку всё объяснил насчёт этого вопроса. Он как и ты заблуждался.
Anatoliy
я вижу, что ты плохо понимаешь тему категорий значений
Constantine
ну не знаю