Типобезопасный using/typedef

Клеванец  Игорь
Клеванец Игорь

Такой код сейчас компилируется.

// C++17
using Uid = uint64_t;
using IpV4 = uint32_t;

void foo(IpV4) {}

int main() {
    foo((int)0);
    foo((Uid)0);

    return 0;
}

Чтобы обезопасить тип IpV4, нужно сделать класс, у которого надо определить все потребные операторы. Хочется иметь возможность сделать это проще: указать тип, от которого наследуюется поведение, но при этом не происходит неявного приведения типов - как в Golang. Сейчас using/typedef не создают новый тип, они дают ему новое имя.

Примеры использования фичи (например, через ключевое слово explicit):

using explicit Comment = std::string;
using explicit Login = std::string;
using explicit Password = std::string;

using explicit Age = uint8_t;

void foo(Comment comment) {}
...
foo(Comment("like!"));
//foo(Login(argv[1])); // fails to compile
19
рейтинг
1 комментарий
Andrey

https://stdcpp.ru/proposals/854534c4-1ab4-42ba-9436-1bb3017f0de5

Andrey
Обновлено 
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).
Все предложения