Сообщение Re[4]: enum class and if expression от 19.12.2019 10:51
Изменено 19.12.2019 10:57 rg45
Re[4]: enum class and if expression
Здравствуйте, удусекшл, Вы писали:
У>Хм, возможно. Но тогда почему не предоставлен механизм для использования в условных конструкциях?
А пока что, я думаю, не будет большим грехом заюзать для преобразования в udnerlying type какие-нибудь унарные операторы: унарный плюс, разыменование... Логическое отрицание, само-собой.
http://coliru.stacked-crooked.com/a/1eb70e86550f0a05
У>Хм, возможно. Но тогда почему не предоставлен механизм для использования в условных конструкциях?
А пока что, я думаю, не будет большим грехом заюзать для преобразования в 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;
}
Re[4]: enum class and if expression
Здравствуйте, удусекшл, Вы писали:
У>Хм, возможно. Но тогда почему не предоставлен механизм для использования в условных конструкциях?
А пока что, я думаю, не будет большим грехом заюзать для преобразования в udnerlying type какие-нибудь унарные операторы: унарный плюс, разыменование...
http://coliru.stacked-crooked.com/a/1eb70e86550f0a05
У>Хм, возможно. Но тогда почему не предоставлен механизм для использования в условных конструкциях?
А пока что, я думаю, не будет большим грехом заюзать для преобразования в 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;
}