编译以下代码
void f(char *,const char *,...) {} void f(const char *,...) {} int main() { f("a","b"); }
与cl ang给我这个错误:
prog.cpp:6:2: error: call to 'f' is ambiguous f("a","b"); ^ prog.cpp:1:6: note: candidate function void f(char *,...) {} ^ prog.cpp:2:6: note: candidate function void f(const char *,...) {} ^
AFAIK字符串文字在C中是常量,因此重载规则应该从考虑中删除第一个变体,从而明确地解析为第二个变体.但是我猜,由于兼容性原因,Clang使它们成为非const(我知道MSVC也是这样做的).
使用什么编译器标志来解决这个问题?我已经用-std = c 11编译了.
编辑:显式转换为const char *解决此问题:
f((const char*)"a","b");
但是如果我正确的观察到的编译器行为不是标准的,我想修复编译器行为而不是标准的符合代码.