我在编写有效的C++03模板代码时遇到了一个小问题(虽然很容易解决),当使用C++11方言时,该代码将无法编译。
问题出现在模板参数解析处。让这段代码成为此问题的例子:
template <uint32_t number>
struct number_of_bits {
enum {
value = 1 + number_of_bits<number >> 1>::value
};
};
template <>
struct number_of_bits<0> {
enum {
value = 0
};
};
自从C++11允许">>"作为模板参数列表的结束符(如果该模板参数作为最后一个参数),当解析此代码时会产生问题。
我使用GCC(版本4.8.1)作为编译器,并且可以通过命令行正常编译:
g++ test.cc -o test
但是当我添加-std=c++11
命令行开关时,它无法编译:
g++ -std=c++11 test.cc -o test
这是C++11的语言特性还是GCC中的一个bug?如果是后者,这是否是已知的bug?
>>
必须关闭0个模板参数,但在C++11中关闭2个模板参数。我不确定如何在不导致C++11编译失败的情况下关闭C++03中未关闭的2个参数。 - nneonneo