标签: c++
请考虑以下代码部分(godbolt example)
template<typename T> void foo(T = int{}) {} int main() { foo(); }
代码无法编译。错误消息指出即使已知默认参数的类型也无法推论T,所以我认为T会推论为int。
T
int
为什么会这样?模板推演是否发生在替换默认参数之前?如果是这样,则在标准中指定?还是定义实现?
请注意,该代码确实使用foo<int>();进行编译。
foo<int>();