为什么以下将constexpr
积分注入模板不起作用
#include <iostream>
#include <type_traits>
template<typename E>
static constexpr auto enumToInt(E e) -> typename std::underlying_type<E>::type
{
return static_cast<typename std::underlying_type<E>::type>(e);
}
template<typename E>
static consteval auto enumToIntC(E e)
{
constexpr auto value = enumToInt(e);
return std::integral_constant<typename std::underlying_type<E>::type, value>{};
}
int main()
{
enum A{ A,B};
constexpr auto e = A::A;
constexpr auto i = enumToInt(e); // works
constexpr auto c = enumToIntC(e); // does not compile...
}
为什么不允许将明确constexpr
value
注入模板参数的限制?non-type
我不明白为什么会有这样的限制?consteval
那是不是因为尚未在其中实现clang-10
并衰减到...而无法编译constexpr
?
因为这有效:
template<int N> struct A {};
constexpr int value = 3;
A<value> b;