Привет всем, я недавно посмотрел на сигналы повышения, потому что я хотел бы переключиться на него из моего собственного кода для обработки уведомлений о сигналах. Я столкнулся с проблемой компиляции первого примера отсюда: http://www.boost.org/doc/libs/1_53_0/doc/html/signals2/tutorial.html, Вот пример исходного кода:
struct HelloWorld
{
void operator()() const
{
std::cout << "Hello, World!" << std::endl;
}
};
// Signal with no arguments and a void return value
boost::signals2::signal<void ()> sig;
// Connect a HelloWorld slot
HelloWorld hello;
sig.connect(hello);
// Call all of the slots
sig();
Проблема, возникшая в результате попытки скомпилировать это с помощью: clang ++ -std = c ++ 11 signal2example.cpp, заключается в следующем:
error: no matching function for call to 'get'
func(std::get<indices>(args)...);
Чтобы сузить проблему, я закомментировал все строки, пока не выяснил, какая из них вызвала, это была строка, которая просто говорит «sig ();» и проблема, кажется, связана с функцией std :: get, которая предназначена для кортежей или чего-то еще. В интернете не так много полезных постов, касающихся увеличения коллизий :: signal2 и clang ++. Следует также отметить, что g ++ компилирует этот документ без каких-либо жалоб.
Когда вы компилируете с помощью Clang и используете STL, используется системный STL (обычно libstdc ++). Это может быть старая версия (Вы используете OSX?).
Clang прекрасно поддерживает C ++ 11 с помощью libc ++, попробуйте добавить -stdlib = libc ++ в командную строку.
Вы также можете попробовать запустить gcc и clang с -v и проверить пути включения, чтобы увидеть, какой stdlib используется в каждом случае.
Других решений пока нет …