Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在依赖类型的上下文中使用constexpr_C++_Templates_Metaprogramming - Fatal编程技术网

C++ 在依赖类型的上下文中使用constexpr

C++ 在依赖类型的上下文中使用constexpr,c++,templates,metaprogramming,C++,Templates,Metaprogramming,简单的问题,这合法吗 template<class T> struct foo { using type = std::conditional<IF_CONDITION<T>::value, constexpr int, int>::type; }; 模板 结构foo{ 使用type=std::conditional::type; }; 编译器错误:“错误:“constexpr”在此处无效” 还没有找到任何关于这个的文档。因为这是一个编译时条件,所以看

简单的问题,这合法吗

template<class T>
struct foo {

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

};
模板
结构foo{
使用type=std::conditional::type;
};
编译器错误:“错误:“constexpr”在此处无效” 还没有找到任何关于这个的文档。因为这是一个编译时条件,所以看起来至少在理论上应该可以做到。

来自标准:

constexpr说明符仅适用于 变量或变量模板或 函数或函数模板的声明。用constexpr声明的函数或静态数据成员 说明符隐式地是一个内联函数或变量(10.1.6)。如果函数或函数的任何声明 模板有一个constexpr说明符,那么它的所有声明都应该包含constexpr说明符。[注: 就constexpr说明符而言,显式专门化可能不同于模板声明。 -结束说明][注:函数参数不能声明为constexpr.-结束说明]

所以constexpr不应该在模板参数内

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

template<typename T>
using MyVec0 = Vector<T,0>;
模板
使用MyVec0=向量;

constexpr int
不是类型“const int”将是类型。“constexpr int”不是一种类型。我明白了,我认为它可以与
const
相媲美。你知道他们是否有任何方法来模拟它吗?(除了类专门化)@JosephFranciscus在什么样的代码中,您需要一些条件constexpr?也许我们可以帮你。我正在写一个像
Eigen
这样的库,所以如果
行==0
那么一个对象就像
Vector
,而不是我想要一个动态行值(即正则
int
),否则我希望它是
constepr
(编译时会知道)