Перегрузка C ++: строковый литерал против неоднозначности boost :: function

мой код проблемы:

#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? Спасибо за любые подсказки.

5
задан denis 21 January 2011 в 09:53
поделиться