Лично я сталкивался с приложениями, не работающими из-за слишком новой версии fontconfig. Наверняка с другими либами тоже бывают такие проблемы.
Просто решения типа snap/AppImage технически ужасны: тянуть все с собой и ставить бесконечное колличество идинаковых либ — печаль беда.
Насчёт AppImage согласен, а вот snap/flatpak — уже совсем другое дело, они предоставляют шаренные рантаймы и дедуплицируют одинаковые либы внутри пакетов.
И вообще, у потомков есть публичные методы, которые нигде, кроме базового класса, использоваться не должны. Это нехорошо, но исправляется через дополнительный уровень абстракции (см. FTSE во второй части).
У меня вроде не сильно высокие запросы, но в QtCreator раздражает необходимость дважды нажимать Esc для выхода из режима вставки, а в IntelliJ — неправильная работа отмены (u). Вроде максимально базовые вещи, а уже работают не так, как в vim, причём однозначно в худшую сторону.
Мне кажется, что так как этот пример приводят в контексте геометрии, подразумевается, что единственный инвариант прямоугольника — сохранение прямых углов. И тогда квадрат от него наследовать нельзя, т.к. у него инвариантов больше.
Конечно, вариантов интерпретации может быть много, но это же чисто умозрительный пример, а не реальная задача.
Записываю макрос копирования, перевода в верхний регистр и перехода на начало следующей строки. 2@w выполняет макрос ещё два раза. Затем копирую блок в фигурных скобках (можно было не переходить для этого в визуальный режим, это просто привычка), заменяю в скопированном блоке const test = на import (опять же, можно было сразу без него скопировать). Далее dWj.j. удаляет из каждой строки фрагмент до пробела. Ну и добавляю from './entity-base'.
Однако void* не является object pointer type.
Если не ошибаюсь, по стандарту каст между object pointer и void pointer может выполняться только со static_cast, хотя по факту любой компилятор reinterpret_cast тоже съест.
В
apt-get install foobar
apt-get — имя бинарника. Это называется не "постфиксы убрали", а "разработчики APT выпустили новую утилиту apt".Как будто в этом есть что-то плохое...
Лично я сталкивался с приложениями, не работающими из-за слишком новой версии fontconfig. Наверняка с другими либами тоже бывают такие проблемы.
Насчёт AppImage согласен, а вот snap/flatpak — уже совсем другое дело, они предоставляют шаренные рантаймы и дедуплицируют одинаковые либы внутри пакетов.
Тут вроде бы речь о разработке игр, а это обычно Steam со своим рантаймом.
В недостатках CRTP
А что мешает писать так?
Кстати, имхо более перспективное направление, чем машинная композиция, но почему-то на эту тему особо не видел исследований.
Включен network.security.esni.enabled и network.trr.mode=2. Почти все заблокированные сайты работают без прокси и впн. Но это в России.
gcc -fno-exceptions насколько я понимаю будет вызывать abort. Чтобы вместо исключения new возвращал nullptr надо вызывать new(std::nothrow).
Похоже на Kate.
У меня вроде не сильно высокие запросы, но в QtCreator раздражает необходимость дважды нажимать Esc для выхода из режима вставки, а в IntelliJ — неправильная работа отмены (u). Вроде максимально базовые вещи, а уже работают не так, как в vim, причём однозначно в худшую сторону.
Мне кажется, что так как этот пример приводят в контексте геометрии, подразумевается, что единственный инвариант прямоугольника — сохранение прямых углов. И тогда квадрат от него наследовать нельзя, т.к. у него инвариантов больше.
Конечно, вариантов интерпретации может быть много, но это же чисто умозрительный пример, а не реальная задача.
Во время записи макроса все изменения сразу применяются, так что такой проблемы на самом деле нет.
И ещё, если бы список был длинным, я бы применил макрос ко всем строкам через
Vi}:normal @w<Enter>
, а не считал бы строки.Записываю макрос копирования, перевода в верхний регистр и перехода на начало следующей строки. 2@w выполняет макрос ещё два раза. Затем копирую блок в фигурных скобках (можно было не переходить для этого в визуальный режим, это просто привычка), заменяю в скопированном блоке const test = на import (опять же, можно было сразу без него скопировать). Далее dWj.j. удаляет из каждой строки фрагмент до пробела. Ну и добавляю from './entity-base'.
Я бы как-то так делал:
jqwwwywWvlpvbgU0jq2@wV%yO<Esc>Pc3wimport<Esc>j^dWj.j.ja from './entity-base'
Ещё как вариант можно растягивать окно на два монитора :)
А потом какой-нибудь код, не знающий разницы между квадратом и прямоугольником меняет созданному Square width.
Да, извиняюсь, немного запутался. void* не является pointer-to-object type, но является object pointer type.
Тогда reinterpret_cast<void*> и reinterpret_cast<void**> полностью валидны.
Однако void* не является object pointer type.
Если не ошибаюсь, по стандарту каст между object pointer и void pointer может выполняться только со static_cast, хотя по факту любой компилятор reinterpret_cast тоже съест.
У нас повсеместно используются смарт-поинтеры, а эта проверка видимо недостаточно умная, чтобы ругнуться на деструктор unique_ptr.