非类型模板参数的计算结果为 -1,不能缩小为类型 'unsigned long long' xcode 4.6
Posted
技术标签:
【中文标题】非类型模板参数的计算结果为 -1,不能缩小为类型 \'unsigned long long\' xcode 4.6【英文标题】:Non-type template argument evaluates to -1, which cannot be narrowed to type 'unsigned long long' xcode 4.6非类型模板参数的计算结果为 -1,不能缩小为类型 'unsigned long long' xcode 4.6 【发布时间】:2013-01-29 12:47:08 【问题描述】:我在我的项目中使用 zxing 和 OpenCV 库。我今天将我的 XCode 从 4.5 更新到 4.6,我收到了这个错误。
externalLibs/boost/include/boost/gil/channel_algorithm.hpp:54:85:非类型模板参数的计算结果为 -1,不能将其缩小为类型 'unsigned long long'
并且这个错误出现在 OpenCV 库的一个类中的这一行代码上:-
struct unsigned_integral_max_value : public mpl::
integral_c< UnsignedIntegralChannel,-1> ;
在早期版本的 Xcode 上,它工作正常。
提前致谢。
【问题讨论】:
你的问题是什么?这是一个声明;) 【参考方案1】:似乎 boost 不喜欢新的 clang 编译器添加的 c++ 11 支持
所以.. 它说在构建设置中禁用 c++ 11 支持
= src:见https://svn.boost.org/trac/boost/ticket/7270
【讨论】:
【参考方案2】:unsigned long long 变量的最大值为十六进制 0xFFFFFFFF FFFFFFFF,即所有位均为 1。如果解释为有符号数,则对应于 -1。所以程序员经常使用 -1 来代替,希望编译器不会抱怨。显然,这在 XCode 4.5 中并没有发生,但 4.6 做了更严格的检查...
【讨论】:
【参考方案3】:在 macOS Sierra 上使用 Apple LLVM version 8.1.0 (clang-802.0.42)
和 -std=c++11
编译时遇到了同样的错误。为了解决这个问题,我加入了以下编译器标志:-Wno-error=c++11-narrowing
【讨论】:
以上是关于非类型模板参数的计算结果为 -1,不能缩小为类型 'unsigned long long' xcode 4.6的主要内容,如果未能解决你的问题,请参考以下文章