【发布时间】:2021-08-19 23:19:28
【问题描述】:
我注意到我似乎不能像我期望的那样使用默认参数作为缩写函数模板。
#include <iostream>
auto f(const auto x = 0) {
return x + sizeof(x);
}
int main() {
std::cout << f() << std::endl; // << broken
std::cout << f(0) << std::endl;
std::cout << f(short(8470)) << std::endl;
}
这是什么原因?
我的猜测是模板机制从不查看默认参数,所以我们遇到这种荒谬的情况,我可以定义一个模板函数,看起来就像它默认为 T=int(其中隐藏了 T模板类型),但是如果不手动指定类型似乎无法调用它:(f<int>())。
这主要是语言琐事,我不认为这是一个真正的问题,但函数模板没有 int 作为默认模板类型看起来确实很奇怪。
【问题讨论】:
-
@RemyLebeau 不错的发现,但我认为这是一个旧的 gcc 扩展......我相信普通 fns 的自动参数是 C++20
-
它可能起源于 C++14 中的 gcc 扩展,但我认为该链接中的一些答案在 C++20 中的标准化风格下仍然适用于这种情况