非类型模板参数的计算结果为 -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的主要内容,如果未能解决你的问题,请参考以下文章

Django模板之模板变量

模板结果和模板选择的Select2参数不同(django)

解压可变参数模板的结果 - Visual Studio 2019 CE

tornado模板使用

常用方法字典

如何对可变参数模板函数的异构参数包进行通用计算?