#include <functional>
void foo(std::function<void()> f) { f(); }
void foo(void (*f)()) { f(); }
int main()
{
foo([](){});
}
VS编译,gcc和clang抱怨模糊超载。谁是对的? lambda应该是类的类型,所以它和函数指针之间不应有任何转换。因此,VS似乎是正确的,而不是一切困难。但也许我错过了一些东西。函数指针和std :: function模糊过载
除了将lambda投射到任一类型之外,是否有简单的方法来消除调用的歧义?
不捕获任何东西(空'''')*的Lambda可以*隐式转换为相同签名的函数指针。 VS(至少你使用的版本)还没有实现。 – JohannesD
@JohannesD OK发现这在5.1.2/6中提到。请让你的评论一个答案,以便我可以接受它。 –
你可以尝试用'f(+ [](){});'来消除歧义。希望这可以帮助。 –