根据此answer constexpr函数始终为inline
。
即使所有特化都不满足constexpr
函数的要求,也可以声明模板函数constexpr
。在最后一种情况下,专业化不是constexpr
。
例如:
template<class T>
constexpr decltype(auto) size(const T& a){
return a.size();
}
std::array<int,10> arr;
std::vector<int> vec;
size(arr);//constexpr
size(vec);//not a constexpr;
实例化size<std::vector>
不是constexpr
,而是inline
?
答案 0 :(得分:3)
是;引用N4640,[dcl.constexpr] / 1:
...使用
constexpr
说明符声明的函数或静态数据成员隐式地是内联函数或变量。 ...
这里的关键是“用声明” - 声明是重要的,而不是constexpr
要求的满足。