【发布时间】:2015-07-22 11:57:11
【问题描述】:
我正在开发 C++ 编程语言的最新版本(认为是 5),但遇到了 g++ 版本 5.2 的问题。
我的代码是第 24 章中 Small_size 模板的变体。
#include <iostream>
template<int N>
bool is_small ()
{
std::cerr << sizeof(N) << std::endl;
std::cerr << N << std::endl;
return N <= 255;
}
bool ism (int i_n)
{
return i_n <= 255;
}
int main ()
{
std::cout << "hallo welt" << std::endl;
std::cout << 0 << " " << is_small<0> << std::endl;
std::cout << 255 << " " <<is_small<255> << std::endl;
std::cout << -4100000000 << " " << is_small<-4100000000> << std::endl;
std::cout << 256 << " " << is_small<256> << std::endl;
std::cout << 256 << " " << ism(256) << std::endl;
std::cout << 256 << " " << (256 <= 255) << std::endl;
}
当我编译它时,没关系。但是当我运行这个东西时,它似乎被打破了。
[cpp11@hydra src]$ cat ~/bin/g14
#!/bin/bash
g++-52 -std=c++14 "${1}.C" -L$LIBPATH -o "$1"
[cpp11@hydra src]$ g14 konzept_small
[cpp11@hydra src]$ ./konzept_small
hallo welt
0 1
255 1
-4100000000 1
256 1 //1
256 0
256 0
[cpp11@hydra src]$
我的问题是:
- 256 及更高的结果是错误的。见评论 //1
-
cerr上没有模板代码的输出
我从没有cerr 的版本开始,但只得到了错误的模板结果。
我从模板中删除了constexpr,但没有任何变化。
所以我在最后一步添加了cerr,看看有什么问题。
有什么想法吗?
【问题讨论】: