Сообщение Re: тянут в кланг и стандарт strong typedef от 09.02.2026 20:25
Изменено 09.02.2026 21:56 vdimas
Re: тянут в кланг и стандарт strong typedef
Здравствуйте, Великий Мессия, Вы писали:
ВМ>https://discourse.llvm.org/t/rfc-clang-adding-strong-typedefs/88843
По-идее, нам должно быть легко получать числовые значения юнитов (для печати/логирования) и сложно инициализировать юниты из чисел и других юнитов, в этом был смысл похожих библиотек-оберток (эксперименты из прошлого).
Парень по ссылке немного напутал, ИМХО. ))
И пример у него плохой.
Здесь должно быть понятней, почему удобней наоборот:
ВМ>https://discourse.llvm.org/t/rfc-clang-adding-strong-typedefs/88843
А почему не наоборот-то?Non-strong → Strong: Compatible (initialization)
UserId uid = 42; // OK: implicit conversion from int
Strong → Non-strong: Incompatible
UserId uid = 42;
int i = uid; // ERROR
По-идее, нам должно быть легко получать числовые значения юнитов (для печати/логирования) и сложно инициализировать юниты из чисел и других юнитов, в этом был смысл похожих библиотек-оберток (эксперименты из прошлого).
Парень по ссылке немного напутал, ИМХО. ))
И пример у него плохой.
Здесь должно быть понятней, почему удобней наоборот:
[[strong]] typedef double Distance;
Distance d1 = 42km;
Distance d2 = 42m;
Distance d2 = 42mm;
Distance d2 = 42; // ???Re: тянут в кланг и стандарт strong typedef
Здравствуйте, Великий Мессия, Вы писали:
ВМ>https://discourse.llvm.org/t/rfc-clang-adding-strong-typedefs/88843
По-идее, нам должно быть легко получать числовые значения юнитов (для печати/логирования) и сложно инициализировать юниты из чисел и других юнитов, в этом был смысл похожих библиотек-оберток (эксперименты из прошлого).
Парень по ссылке немного напутал, ИМХО. ))
И пример у него плохой.
Здесь должно быть понятней, почему удобней наоборот:
ВМ>https://discourse.llvm.org/t/rfc-clang-adding-strong-typedefs/88843
А почему не наоборот-то?Non-strong → Strong: Compatible (initialization)
UserId uid = 42; // OK: implicit conversion from int
Strong → Non-strong: Incompatible
UserId uid = 42;
int i = uid; // ERROR
По-идее, нам должно быть легко получать числовые значения юнитов (для печати/логирования) и сложно инициализировать юниты из чисел и других юнитов, в этом был смысл похожих библиотек-оберток (эксперименты из прошлого).
Парень по ссылке немного напутал, ИМХО. ))
И пример у него плохой.
Здесь должно быть понятней, почему удобней наоборот:
[[strong]] typedef double Distance;
Distance d1 = 42km;
Distance d2 = 42m;
Distance d3 = 42mm;
Distance d4 = 42; // ???