标题中的“void f(auto){}”是否需要“内联”?

xml*_*lmx 3 c++ templates inline auto c++20

考虑

template<typename T>
inline void f(T) {} // "inline" can be safely removed.
Run Code Online (Sandbox Code Playgroud)

inline void f(auto) {} // Can "inline" also be safely removed?
Run Code Online (Sandbox Code Playgroud)

按照C ++标准,可以 inline 在后者的情况下被安全地移除?

Nic*_*las 5

来自[dcl.fct]/18

缩写函数模板是具有一个或多个泛型参数类型占位符 ([dcl.spec.auto]) 的函数声明。一个缩写的函数模板等价于一个函数模板([temp.fct]),它的模板参数列表包括一个发明的类型模板参数,用于函数声明的每个泛型参数类型占位符,按出现顺序。

加了重点。这并没有为inline不是默认设置留下很大的回旋余地。

  • 不过,默认情况下模板不是内联的(这在模块中很重要);它们只是在 ODR 中*与*内联函数(和变量)一起提到。 (2认同)