在类型相关的上下文中使用constexpr

时间:2018-01-10 20:22:41

标签: c++ templates metaprogramming

简单的问题,这是合法的吗?

template<class T>
struct foo {

using type = std::conditional<IF_CONDITION<T>::value, constexpr int, int>::type;

};

编译器错误:&#34;错误:&#34; constexpr&#34;在这里无效&#34; Haven找不到任何关于此的文档。因为它的编译时间条件似乎至少应该在理论上能够做到。

1 个答案:

答案 0 :(得分:1)

来自标准:

  

constexpr说明符只能应用于a的定义   变量或变量模板或       声明函数或函数模板。使用constexpr声明的函数或静态数据成员       说明符隐式地是内联函数或变量(10.1.6)。如果有任何功能或功能的声明       template有一个constexpr说明符,然后它的所有声明都应该包含constexpr说明符。 [ 注意:       显式特化可以与constexpr说明符的模板声明不同。        - 尾注] [注意:函数参数不能声明为constexpr。 - 结束说明]

因此,constexpr不应该在模板参数范围内。

在您的情况下,您可以使用以下命令创建类型特化别名

Range