即使实例化不是constexpr,模板函数是否仍然内联constexpr?

时间:2017-03-16 13:03:37

标签: c++ language-lawyer inline constexpr

根据此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

1 个答案:

答案 0 :(得分:3)

是;引用N4640,[dcl.constexpr] / 1:

  

...使用constexpr说明符声明的函数或静态数据成员隐式地是内联函数或变量。 ...

这里的关键是“声明” - 声明是重要的,而不是constexpr要求的满足。