根据我的编译器gcc-4.6,下面示例中对func的调用是不明确的。
void func(const std::string &str) {
}
void func(std::function<std::string()> f) {
}
void test() {
func("Hello");
}
编译器说这个是正确的吗?如果我删除第一个重载,则此代码将无法编译,因为它将无法实例化所涉及的模板。
除了重命名两个函数之一或显式转换为std :: string之外,还有解决方法吗?
答案 0 :(得分:4)
SFINAE可以在std::function
的构造函数中解析它。但是,它似乎并不是必需的,也不是GCC提供的。所以你不能依赖它来解决它。
答案 1 :(得分:3)
您还可以添加第三个重载以显式捕获字符串文字大小写:
void func(char const* cstr) {
return func(std::string(cstr));
}