Re[4]: enum class and if expression
От: rg45 СССР  
Дата: 19.12.19 10:51
Оценка:
Здравствуйте, удусекшл, Вы писали:

У>Хм, возможно. Но тогда почему не предоставлен механизм для использования в условных конструкциях?


А пока что, я думаю, не будет большим грехом заюзать для преобразования в udnerlying type какой-нибудь унарный оператор: унарный плюс, разыменование...

http://coliru.stacked-crooked.com/a/1eb70e86550f0a05

#include <iostream>
#include <type_traits>
#include <utility>

template <typename T>
std::enable_if_t<std::is_enum_v<T>, std::underlying_type_t<T>> operator + (T e) {
    return std::underlying_type_t<T>(e);
}

template <typename T>
std::enable_if_t<std::is_enum_v<T>, std::underlying_type_t<T>> operator * (T e) {
    return +e;
}

enum class Flags : unsigned {
    one = 1,
    two = 2,
    four = 4,
};

int main() {
    if (+Flags::one)
        std::cout << "Ok" << std::endl;

    if (*Flags::two)
        std::cout << "Ok" << std::endl;
}
--
Отредактировано 19.12.2019 12:05 rg45 . Предыдущая версия . Еще …
Отредактировано 19.12.2019 10:57 rg45 . Предыдущая версия .
Отредактировано 19.12.2019 10:57 rg45 . Предыдущая версия .
Отредактировано 19.12.2019 10:56 rg45 . Предыдущая версия .
Отредактировано 19.12.2019 10:55 rg45 . Предыдущая версия .
Отредактировано 19.12.2019 10:53 rg45 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.