#include <functional>
void foo(std::function<void()> f) { f(); }
void foo(void (*f)()) { f(); }
int main ()
{
foo( [](){} );
}
VS 编译、gcc 和 clang 抱怨重载模棱两可。谁是对的?lambda 应该是类类型,所以它和函数指针之间不应该有任何转换。因此,VS 似乎是正确的,不顾一切。但也许我错过了一些东西。
除了将 lambda 转换为任一类型之外,是否有一种简单的方法来消除调用歧义?