-
Notifications
You must be signed in to change notification settings - Fork 55
Closed
Description
Just hit an issue when overloading a function accepting inplace_function
vs. std::function
. The compiler (MSVC 2017, clang 7) cannot disambiguate by function arguments. Here is a repro example and a link to it on compiler explorer.
Not sure if there is something to be done about this, worth investigating though.
#include <cstdio>
#include <functional>
#include <sg14/inplace_function.h>
// Something to be done about this?
/**
* Ambiguous
*/
void myfunc(stdext::inplace_function<void()>&& exec) {
std::invoke(exec);
}
void myfunc(stdext::inplace_function<void(size_t)>&& exec) {
std::invoke(exec, size_t(42));
}
/**
* Not ambiguous
*/
void myfunc_std(std::function<void()>&& exec) {
std::invoke(exec);
}
void myfunc_std(std::function<void(size_t)>&& exec) {
std::invoke(exec, size_t(42));
}
int main(int, char**) {
// ambiguous
myfunc([](){
printf("blee\n");
});
// ok
myfunc_std([](){
printf("blou\n");
});
return 0;
}
Good day
Metadata
Metadata
Assignees
Labels
No labels