【发布时间】:2016-12-19 05:53:58
【问题描述】:
给定一个我想返回enum class 的基础类型的函数的简短问题:
为什么这个版本可以正常工作
template<typename T>
constexpr inline
typename std::enable_if_t<
std::is_enum<T>::value,
typename std::underlying_type_t<T>
>
enumValue(T p_rVal) noexcept
{
return static_cast<typename std::underlying_type_t<T>>(p_rVal);
}
if (enumValue(myEnumClass) == 0) {}
而这个失败并出现“找不到匹配的重载函数”(VS 2015)错误:
template<
typename T,
typename std::enable_if_t<
std::is_enum<T>::value,
typename std::underlying_type_t<T>
>
>
constexpr inline
typename std::underlying_type_t<T>
enumValue(T p_rVal) noexcept
{
return static_cast<typename std::underlying_type_t<T>>(p_rVal);
}
非常感谢您的帮助!
【问题讨论】:
-
@Dan 你为什么拒绝 Torbjörn 提议的编辑?改进这篇文章的格式非常有意义。
-
在
std::underlying_type_t<T>之前不需要typename。 -
是的,没错,C++14 的优势。顺便说一句,我已经删除了它们,但仍然感谢您的提示!
标签: c++ class enums c++14 enable-if