4

为什么以下将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;
4

0 回答 0