【问题标题】:clang++ will not build first example in boost signals2clang++ 不会在 boost signals2 中构建第一个示例
【发布时间】:2014-01-30 06:47:13
【问题描述】:

大家好,我最近一直在研究增强信号,因为我想从我自己的自定义代码切换到它来处理信号通知。我从这里编译第一个示例时遇到了问题: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 signals2example.cpp 是这里的错误:

 error: no matching function for call to 'get'
          func(std::get<indices>(args)...);

为了缩小问题的范围,我注释掉了所有的行,直到我弄清楚是哪一行引起的,它只是简单地说“sig();”的那一行。并且问题似乎与用于元组或其他东西的 std::get 函数有关。关于 boost::signal2 和 clang++ 冲突的在线帖子并不多。我还应该注意到,g++ 编译这个文档完全没有抱怨。

【问题讨论】:

  • 没有看到实际代码我只能猜测,但我的猜测是,在示例中 indices 名称是一个变量而不是编译时常量。模板是仅编译时的构造,因此所有非类型模板参数都必须是编译时常量。不过,Boost 会犯这样的错误似乎很奇怪。
  • @JoachimPileborg 这个库的性能也不是很好;我对质量如此低的水平并不感到惊讶,我曾经尝试过那个库,我看不出有人如何以及为什么使用它,实际上没有意义。

标签: c++ g++ clang++ boost-signals2


【解决方案1】:

当您使用 Clang 编译并使用 STL 时,将使用系统 STL(通常是 libstdc++)。它可以是旧版本(你使用 OSX 吗?)。 Clang 完美支持带有 libc++ 的 C++11,尝试将 -stdlib=libc++ 添加到命令行。 您也可以尝试使用 -v 运行 gcc 和 clang,并检查包含路径以查看每种情况下使用的 stdlib。

【讨论】:

    猜你喜欢
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多