vladislav
а зачем они мне нужны?
cyberzx 🇷🇺
вот ни разу не сталкивался с тем, что бы багфикс выпускали вместе с поломкой обратной совместимости
vladislav
Своим присутствием мешают.
Danil
наличием, лол
Danil
хочу тонко
Danil
не хочу жирный stdlib
Danil
лол
Danil
вот и все
vladislav
Наличием присутствия
Danil
жирный stdlib не влезет на маленькую flash
Danylo
гусары, не пора ли в холивар?
vladislav
Я по-моему объяснил, я в принципе за минимализм во всём, такой подход к жизни.
Danil
без stdlib как вариант
Anton
Там stdlib кастрируется по самое небалуй.
Anton
Причём c++ library почти не юзается, если говорить об STM-мах
Anton
google newlib
Anton
без stdlib как вариант
В хидерах хранить исходники. Кек.
Крылатый
Продолжаем struct i_base { virtual i_base() {} }; struct foo : i_base { }; // Создаём точную копию using explicit bar = foo; /* Таким образом у нас имеется тип, аналогичный foo. struct bar : i_base {}; И применим dynamic_cast. */
Крылатый
От foo для bar, но, очевидно, неприменимы без явного каста.
🐙 Antony
Я по-моему объяснил, я в принципе за минимализм во всём, такой подход к жизни.
-nostdlib или -static-libstdc++ -lto Вот вам минимализм. А почему вам этого недостаточно, и вы хотите отобрать у других людей инструменты - я не помнимаю. Приведите пожалуйста аргументы
Constantine
У меня появилась безумная идея по поводу integer strong type alias. Можно объявить enum class aliased_type : int {} и немного тайпкастов
cyberzx 🇷🇺
Separation of concerns. Я не против стандартных кроссплатформенных прикладных библиотек. Я хочу, что бы они были отделены от стандарта самого языка и его core-библиотек. Да я хотел бы, что бы С++ из под коробки умел столько же, сколько и питон. И HTTP сервер запустить, и md5 посчитать, и всякое попарсить. Но пусть это будет как-то отдельно. Возможно тоже стандартизированно, но каким-нибудь паралелльным стандартом.
Крылатый
Но тут суть не только в интах.
Крылатый
А в newtype в целом.
Крылатый
Так вот щас не начинай спамить.
Constantine
https://groups.google.com/a/isocpp.org/forum/#!topic/std-proposals/gkJUVnL-Fmg
Тут в чате немного обсуждалось. Мне лично нравится синтаксис using explicit aliased_name = name; и нравится идея называть преобразование explicit_cast
Berkus
expletive_cast<>
Крылатый
Верней, именно такой вариант и вбросил.
Berkus
using tourette aliased_shit = name; expletive_cast<real_shit>(aliased_shit);
Ivan
зависит от linker script, куда они попадут
Я тут сделал https://godbolt.org/g/V4qhMm
Крылатый
А вот каст отдельный не нужен, имхо.
Constantine
ахаахахахаха
Berkus
Я тут сделал https://godbolt.org/g/V4qhMm
ты же не контролируешь там linker script
Constantine
А вот каст отдельный не нужен, имхо.
Нужен, потому что я хочу гарантированное поведение что aliased_type и type полностью одинаковые
Berkus
на арме твои статик строки могут лежать прямо рядом с функцией например
Ivan
Да, я и не про это. Я не понимаю ассемблер, но ведь вторая структура на стеке, это же видно из кода?
Ivan
Я имею ввиду символы структуры
Крылатый
Нужен, потому что я хочу гарантированное поведение что aliased_type и type полностью одинаковые
А так почему бы просто не оставить static_cast? Семантика using explicit и так подразумевает полную копию объекта.
Constantine
ну по сути namespace std { template <typename T1, typename T2> enable_if<is_strong_alias<T1, T2>::value, T1&>::value explicit_cast(T2 & ref) { return static_cast<T1&>(ref); } }
Крылатый
Если не может привести, то не приведёт.
Constantine
А статик тебе не тоже самое сделает?
Статик позволяет слишком много что проконвертить случайно
Крылатый
Хм...
Berkus
static_cast и так слишком оверлоадед, д
Constantine
я разрешаю static_cast для ссылок и пишу std::explicit_cast
Constantine
но это все пропоузалы
Крылатый
Вкинь в тот дискасс на гуглогруппе, тогда.
Constantine
Крылатый
Да.
Крылатый
Кнопочка «ОТВЕТИТЬ»
Крылатый
В принципе, это ж просто мэйл листы.
Constantine
Я вот начал писать Strong typedefs are guaranteed to be exactly the same in-memory and are exactly the same type by RTTI
Constantine
И задумался что шаблоны не будут работать
Крылатый
Почему?
Constantine
потому что typeinfo одинаковый может быть проблемой для какого-нибудь dynamic_cast и std::variant
Constantine
т.е. видимо нельзя std::variant<aliased1, aliased2>
Крылатый
Это ещё почему? Это же два совершенно разных типа.
Крылатый
Так что и typeinfo должны быть разными.
Constantine
Я собирался писать вот так: Strong typedefs are guaranteed to be exactly the same in-memory and are exactly the same type by RTTI
Constantine
Иначе их нельзя static_cast-ить
Крылатый
А..
Крылатый
Постой.
Крылатый
И в чём тут проблема?
Крылатый
Если можно руками обхявить две одинаковые структурки с разными именами. Они будут ижентичны как в памяти, так по RTTI. Но разные имена.
Крылатый
Имена же!
Berkus
так explicit typealias это не только имена
Constantine
> Они будут ижентичны как в памяти, так по RTTI нет
Крылатый
Хм. Ок.
Constantine
а, кто-то уже вбросил инфу с чатика туда
Крылатый
Так ты и вбросил жи.
Крылатый
@webreh го пропозал писать?
Constantine
У меня пока много вопросов :)
Constantine
Ну например я немного сомневаюсь, что все пойдет как надо, если будут разрешен по сути implicit cast для всех вычисленных использований type в функциях aliased_type
Constantine
Я пока хотел написать мини-библиотеку для integral types, используя объявление enum class в качестве основы