cpp-ru / ideas

Идеи по улучшению языка C++ для обсуждения
https://cpp-ru.github.io/proposals
Creative Commons Zero v1.0 Universal
89 stars 0 forks source link

std::exclusive_or #538

Closed dasfex closed 1 year ago

dasfex commented 1 year ago

В STL есть std::conjunction и std::disjunction. Тут покрыты лишь две из трёх основных битовых операций в короткой форме. Однако нет никакого аналога xor-метафунктора (xor по определению не имеет короткой формы, но всё же).

Possible implementation:

template <typename T, typename... Args>
struct exclusive_or : exclusive_or<T, exclusive_or<Args...>> {};

template <typename T>
struct exclusive_or<T> : T {};

template <typename T, typename S>
struct exclusive_or<T, S> {
    static constexpr bool value = T::value ^ S::value;
};

template <typename... Args>
constexpr inline bool exclusive_or_v = exclusive_or<Args...>::value;
tomilov commented 1 year ago

Почему в определении бинарная операция а не логическая? Логическая - это !=. Где требуется метафункция? Кроме консистентности есть какие-то другие причины, почему бы это нужно добавить в стандарт?