简单的问题,这是合法的吗?
template<class T>
struct foo {
using type = std::conditional<IF_CONDITION<T>::value, constexpr int, int>::type;
};
编译器错误:&#34;错误:&#34; constexpr&#34;在这里无效&#34; Haven找不到任何关于此的文档。因为它的编译时间条件似乎至少应该在理论上能够做到。
答案 0 :(得分:1)
来自标准:
constexpr说明符只能应用于a的定义 变量或变量模板或 声明函数或函数模板。使用constexpr声明的函数或静态数据成员 说明符隐式地是内联函数或变量(10.1.6)。如果有任何功能或功能的声明 template有一个constexpr说明符,然后它的所有声明都应该包含constexpr说明符。 [ 注意: 显式特化可以与constexpr说明符的模板声明不同。 - 尾注] [注意:函数参数不能声明为constexpr。 - 结束说明]
因此,constexpr不应该在模板参数范围内。
在您的情况下,您可以使用以下命令创建类型特化别名
Range