为什么函数模板的显式实例化不能使用内联或constexpr

时间:2017-02-02 14:39:27

标签: c++ templates inline constexpr explicit-instantiation

参考cppreference's section on function templates

  

显式实例化函数模板或成员函数   类模板不能使用内联或constexpr

这些主题inlineconstexpr似乎是分开且无关的。为什么存在这种限制?

1 个答案:

答案 0 :(得分:2)

因为它们用于相反的目的。

显式实例化的重点是,在 source 文件中,为项目所需的模板提供定义,这样您就不必在{{3}中完全定义模板}}

inline的要点是允许标题中的函数定义 - 以便跨多个翻译单元的多个函数定义可以合并为一个。

constexpr函数必须具有可见的定义,以便编译器能够在编译时实际调用它们。没有链接时间constexpr

显式实例化inlineconstexpr函数没有意义 - 这些函数模板必须已经在头文件中定义,因此可以按需隐式实例化。