Здравствуйте, Великий Мессия, Вы писали:
ВМ>https://discourse.llvm.org/t/rfc-clang-adding-strong-typedefs/88843
в том виде в котором есть, надеюсь, инициативу зарубят.
Для UserId уже есть enum class
__attribute__((strong)) typedef int UserId;
enum class UserId{};
Для метров уже есть boost.units и новая поделка близко не удовлетворит потребностям.
Если сравнивать с другими языками, то это просто жалкие крохи. Например underlying типы поддерживают операцию +. Надо дать пользователю решать должен ли strong type поддерживать эту операцию. И если должен, то дать возможность переопределить. Почему подход с enum class и популярен. Он из коробки даёт операцию <=>
Как по мне, самый простой путь — доработать подход с enum class. Чтобы underlying type мог быть любым:
enum class PassportId: std::string { Invalid = "" };