gpt4 book ai didi

c++ - 当 -std=c++11 选项被删除时,clang++ 仅使用 boost::format 编译 C++11 程序

转载 作者:可可西里 更新时间:2023-11-01 18:39:06 24 4
gpt4 key购买 nike

请看下面的 C++11 片段:

#include <boost/format.hpp>

int main(int argc, char** argv)
{
auto s = boost::format("");
return 0;
}

当我使用 -std=c++11 用 clang 编译它时,我得到以下错误:

$ clang++ -std=c++11 -o main main.cpp
In file included from main.cpp:1:
In file included from /usr/include/boost/format.hpp:19:
In file included from /usr/include/boost/detail/workaround.hpp:41:
In file included from /usr/include/boost/config.hpp:40:
In file included from /usr/include/boost/config/select_stdlib_config.hpp:18:
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/4.9.0/../../../../include/c++/4.9.0/cstddef:51:11: error:
no member named 'max_align_t' in the global namespace
using ::max_align_t;
~~^
1 error generated.

如果没有 -std=c++11,一切都可以正常编译,但 clang 会打印一条警告:

$ clang++ -o main main.cpp
main.cpp:5:3: warning: 'auto' type specifier is a C++11 extension [-Wc++11-extensions]
auto s = boost::format("");
^

因此,看起来一个有效的解决方法是删除 C++11 标志,因为当前版本的 clang 似乎处于 C++11 模式,无论如何?缺点是你会收到很多警告。

除了完全切换到 gcc 之外,还有更好的解决方法吗?修补 boost::format 或 gcc-libs 的源代码对我来说很好。


系统信息:

  • 平台:Arch Linux x86_64
  • boost 版本:1.55.0-6
  • gcc-libs: 4.9.0-1
  • clang++:3.4(标签/RELEASE_34/final)

最佳答案

bug现在关闭了。它应该在 Arch 中用 clang 3.4-2 修复。

this commit , Evangelos Foutras 从上游合并了以下补丁: http://reviews.llvm.org/rL201729

关于c++ - 当 -std=c++11 选项被删除时,clang++ 仅使用 boost::format 编译 C++11 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23462950/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com