根据我的编译器gcc-4.6,下面示例中对func的调用是不明确的.
void func(const std::string &str) {
}
void func(std::function<std::string()> f) {
}
void test() {
func("Hello");
}
Run Code Online (Sandbox Code Playgroud)
这样说编译器是否正确?如果我删除第一个重载,则此代码将无法编译,因为它将无法实例化所涉及的模板.
无论如何要解决这个问题,要么重命名两个函数之一,要么显式转换为std :: string?
您还可以添加第三个重载来显式捕获字符串文字大小写:
void func(char const* cstr) {
return func(std::string(cstr));
}
Run Code Online (Sandbox Code Playgroud)