Явно запретить создание объекта для определенного типа в шаблонном классе

dix75
dix75

Имеем

template<class T>
struct Cool {
    void print() {}
};

template<>
void Cool<double>::print() = delete;

Хотелось бы пользователю сказать, что для определенного типа нельзя создавать объекты на основе данного класса.

template<>
void Cool<double> = delete;

 

-4
рейтинг
3 комментария
yndx-antoshkka
Можно уже сейчас делать через static_assert:



template<class T>
struct Cool {
    static_assert(!is_same_v<T, double>, "Запрещено!");

    void print() {}
};
yndx-antoshkka
dix75
Да. Согласен. Более того у меня было такое же мнение. Но после того как Комитет ввел ключевое слово delete для удаления функций-член, которые мы десятилетиями помещали в private секции
свое мнение изменил.
Явное удаление имплиментации унифицирует процесс разработки и на ряду с явным инстацированием шаблонов, некоторая реализация помеченная как delete делает код более читабельным с одной стороны и позволит компиляторам оптимизировать процесс (например поиска) с другой.
dix75
develoit
template <>
struct Cool<double>
{ Cool() = delete; };
develoit
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).