Я пишу библиотечную функцию, способную обрабатывать любой целочисленный тип, но мне хотелось бы запретить ей также обрабатывать типы символов (например, char, char16_t и т. д.), поскольку это может сбивать пользователя с толку (у меня есть отдельная функция для обработки символов, которые должны выглядеть как символы).
Сейчас я использую такой код:
< pre class="lang-cpp Prettyprint-override">
Код: Выделить всё
template <
typename = std::enable_if_t<
std::is_integral_v && !std::is_same_v &&
!std::is_same_v && !std::is_same_v &&
!std::is_same_v && !std::is_same_v>>
constexpr auto do_stuff(T curr) noexcept {
/* TODO */
}
Однако это кажется очень хрупким — например, это было бы не совсем правильно для компилятора C++20 с char8_t, и даже если бы я сделал правильную функцию тесты для char8_t все еще довольно неудобно перечислять их все.
Есть ли способ обнаружить char-подобные типы, где мне не нужно было бы перечислять их все вышел?
Подробнее здесь:
https://stackoverflow.com/questions/682 ... types-in-c