Информация об изменениях

Сообщение Re[7]: Амбигус оператор от 14.04.2025 12:58

Изменено 14.04.2025 13:03 rg45

Re[7]: Амбигус оператор
Здравствуйте, Marty, Вы писали:

M>Здравствуйте, pilgrim_, Вы писали:


_>>Оффтоп. Мимо проходил . По мотивам соседней темы посмотрел на твои is_bool/_is_char: https://github.com/al-martyn1/marty_format/blob/9bc7c73884f74e9fc8dbcc76e5612d504bc21cce/utils.h#L364C51-L364C52.

_>>Может не в курсе, но is_same суровый метод, и для него типы с cv-квалификаторами это разные типы, для игноар cv можно заюзать remove_cv_t, напр:
_>>
_>>template<typename T> using is_bool = std::is_same<std::remove_cv_t<T>, bool>;
_>>



M>Спасибо!


Здесь уместно будет заюзать std::decay дабы полностью очистить тип от разного рода модификаторов, в т.ч. и ссылок, и тем самым избавиться от лишнего геморроя при работе с формальными параметрами функций:

template<typename T> using is_bool = std::is_same<std::decay_t<T>, bool>;


А ещё все вот эти метафунции std::is_... канули в прошлое с приходом концептов. То же самое, но по-современному:

template<typename T> concept Bool = std::same_as<std::decay_t<T>, bool>;

static_assert(Bool<const bool&>);
Re[7]: Амбигус оператор
Здравствуйте, Marty, Вы писали:

M>Здравствуйте, pilgrim_, Вы писали:


_>>Оффтоп. Мимо проходил . По мотивам соседней темы посмотрел на твои is_bool/_is_char: https://github.com/al-martyn1/marty_format/blob/9bc7c73884f74e9fc8dbcc76e5612d504bc21cce/utils.h#L364C51-L364C52.

_>>Может не в курсе, но is_same суровый метод, и для него типы с cv-квалификаторами это разные типы, для игноар cv можно заюзать remove_cv_t, напр:
_>>
_>>template<typename T> using is_bool = std::is_same<std::remove_cv_t<T>, bool>;
_>>



M>Спасибо!


Здесь уместно будет заюзать std::decay дабы полностью очистить тип от разного рода модификаторов, в т.ч. и ссылок, и тем самым избавиться от лишнего геморроя при работе с формальными параметрами функций:

template<typename T> using is_bool = std::is_same<std::decay_t<T>, bool>;


А ещё все вот эти метафунции std::is_... канули в прошлое с приходом концептов. То же самое, но по-современному:

template<typename T> concept Bool = std::same_as<std::decay_t<T>, bool>;

static_assert(Bool<const bool&>);

void foo(Bool auto b) {/* . . . */}