C++默认实参的转换是否纳入重载决议?析调用歧义争议
C++默认实参与函数重载歧义问题
考虑以下代码:
void foo(int* = 0); // (1) void foo(int = 0); // (2) int main() { foo(0); // OK, calls (2) foo(); // error, ambiguous overload }
GCC和Clang均表现出上述行为,但我对此正确性存疑。
C++标准[expr.call]第6款仅说明:
若无对应实参,则使用该形参的默认实参。
这表明调用foo()时会等价于foo(0),此时对于(1)需要将0转换为int*。因此我认为两次函数调用均应合法,但是否存在标准条款反驳此观点?默认实参的转换是否被视为“无代价”,不纳入转换序列考量?
内容的提问来源于stack exchange,提问作者Jan Schultke
相关产品推荐
相关产品推荐

