尝试使用 clang + libc++(C++11 模式)编译这一行时:
#include <boost/thread.hpp>
clang 发出以下错误:
在 test.cpp:1 中包含的文件中: 在 /Users/yongwei/Programming/boost_1_52_0/boost/thread.hpp:13 包含的文件中: 在 /Users/yongwei/Programming/boost_1_52_0/boost/thread/thread.hpp:17 包含的文件中: 在 /Users/yongwei/Programming/boost_1_52_0/boost/thread/pthread/thread_data.hpp:11 包含的文件中: 在 /Users/yongwei/Programming/boost_1_52_0/boost/thread/locks.hpp:18 包含的文件中: 在 /Users/yongwei/Programming/boost_1_52_0/boost/chrono/time_point.hpp:33 包含的文件中: /Users/yongwei/Programming/boost_1_52_0/boost/chrono/duration.hpp:353:49: 错误: constexpr 函数从不产生常量表达式 静态 BOOST_CHRONO_LIB_CONSTEXPR 浮动最低() ... ^ /Users/yongwei/Programming/boost_1_52_0/boost/chrono/duration.hpp:355:21:注意: 非 constexpr 函数 'max' 不能在常量表达式中使用 返回 -(std::numeric_limits::max) (); ^ /usr/bin/../lib/c++/v1/limits:443:43:注意:在这里声明 _LIBCPP_INLINE_VISIBILITY 静态类型 max() _NOEXCEPT {return ... ^ 在 test.cpp:1 中包含的文件中: 在 /Users/yongwei/Programming/boost_1_52_0/boost/thread.hpp:13 包含的文件中: 在 /Users/yongwei/Programming/boost_1_52_0/boost/thread/thread.hpp:17 包含的文件中: 在 /Users/yongwei/Programming/boost_1_52_0/boost/thread/pthread/thread_data.hpp:11 包含的文件中: 在 /Users/yongwei/Programming/boost_1_52_0/boost/thread/locks.hpp:18 包含的文件中: 在 /Users/yongwei/Programming/boost_1_52_0/boost/chrono/time_point.hpp:33 包含的文件中: /Users/yongwei/Programming/boost_1_52_0/boost/chrono/duration.hpp:361:50: 错误: constexpr 函数从不产生常量表达式 静态 BOOST_CHRONO_LIB_CONSTEXPR 双最低() ... ^ /Users/yongwei/Programming/boost_1_52_0/boost/chrono/duration.hpp:363:21:注意: 非 constexpr 函数 'max' 不能在常量表达式中使用 返回 -(std::numeric_limits::max) (); ^ /usr/bin/../lib/c++/v1/limits:443:43:注意:在这里声明 _LIBCPP_INLINE_VISIBILITY 静态类型 max() _NOEXCEPT {return ... ^ 在 test.cpp:1 中包含的文件中: 在 /Users/yongwei/Programming/boost_1_52_0/boost/thread.hpp:13 包含的文件中: 在 /Users/yongwei/Programming/boost_1_52_0/boost/thread/thread.hpp:17 包含的文件中: 在 /Users/yongwei/Programming/boost_1_52_0/boost/thread/pthread/thread_data.hpp:11 包含的文件中: 在 /Users/yongwei/Programming/boost_1_52_0/boost/thread/locks.hpp:18 包含的文件中: 在 /Users/yongwei/Programming/boost_1_52_0/boost/chrono/time_point.hpp:33 包含的文件中: /Users/yongwei/Programming/boost_1_52_0/boost/chrono/duration.hpp:369:55: 错误: constexpr 函数从不产生常量表达式 静态 BOOST_CHRONO_LIB_CONSTEXPR 长双最低() ... ^ /Users/yongwei/Programming/boost_1_52_0/boost/chrono/duration.hpp:371:21:注意: 非 constexpr 函数 'max' 不能在常量表达式中使用 返回 -(std::numeric_limits::max)(); ^ /usr/bin/../lib/c++/v1/limits:443:43:注意:在这里声明 _LIBCPP_INLINE_VISIBILITY 静态类型 max() _NOEXCEPT {return ... ^ 产生 3 个错误。
在我看来这是 libc++ 中的一个错误,因为 C++11 确实要求这些函数是constexpr
.
有人遇到过同样的问题,你能同意吗?你知道任何修复吗?
我的clang版本是:
Apple clang 版本 4.1 (tags/Apple/clang-421.11.66) (基于 LLVM 3.1svn) 目标:x86_64-apple-darwin11.4.2 线程模型:posix