мой код проблемы:
#include <string>
#include <boost/function.hpp>
void func (const std::string&) {}
void func (const boost::function<void()>&) {}
int main() {
func (main); // good
func ("bad");
return 0;
}
=>
error: call of overloaded ‘func(const char [4])’ is ambiguous
overload.cpp:4: note: candidates are: void func(const std::string&)
overload.cpp:5: note: void func(const boost::function<void ()()>&)
Я знаю, что могу решить эту проблему, явно вызывая func (string ("bad")); или предоставляя func (const char *), но мне интересно, есть ли способ сохранить вызывающую сторону, как в примере, без дополнительных перегрузок.
Может быть, что-то с boost :: enable_if? Спасибо за любые подсказки.