Clang ++ не будет строить первый пример в сигналах повышения2

Привет всем, я недавно посмотрел на сигналы повышения, потому что я хотел бы переключиться на него из моего собственного кода для обработки уведомлений о сигналах. Я столкнулся с проблемой компиляции первого примера отсюда: 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 ++ компилирует этот документ без каких-либо жалоб.

0

Решение

Когда вы компилируете с помощью Clang и используете STL, используется системный STL (обычно libstdc ++). Это может быть старая версия (Вы используете OSX?).
Clang прекрасно поддерживает C ++ 11 с помощью libc ++, попробуйте добавить -stdlib = libc ++ в командную строку.
Вы также можете попробовать запустить gcc и clang с -v и проверить пути включения, чтобы увидеть, какой stdlib используется в каждом случае.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector