1 #include <cstdlib>
2 #include <iostream>
3
4 enum { SIZE_PER_CHUNK = ((1<<16) / sizeof(unsigned)) };
5
6 class TrueType {} ;
7 class FalseType {} ;
8
9 template< std::size_t V, bool B = (((V) & ((V) - 1)) == 0) > class IsPowerOfTwo_;
10 template< std::size_t V > class IsPowerOfTwo_< V, true > : public TrueType {};
11 template< std::size_t V > class IsPowerOfTwo_< V, false > : public FalseType {};
12
13 typedef IsPowerOfTwo_< SIZE_PER_CHUNK > IsPowerOfTwo;
14
15
16 int main() {
17 IsPowerOfTwo p2;
18
19 std::cout << "Hello World!" << std::endl;
20 return 0;
21 }
以下代码给出了编译器警告(gcc 4.6.2,/ project / dfttools / compile / lnx-x86 / gcc-4.6.2):
警告:在'&amp;'操作数的' - '周围建议括号[-Wparentheses]
警告指向第13行,但它可能与第9行中的表达式有关。
任何解决方案?
答案 0 :(得分:1)
对我来说看起来像编译器错误。就好像编译器从默认的B
值中删除不需要的括号,然后它会引发警告本身。
解决方法:
template<size_t V> struct IsPowerOfTwo_Helper
{
enum { value = V & (V - 1) };
};
template< std::size_t V, bool B = IsPowerOfTwo_Helper<V>::value == 0 > class IsPowerOfTwo_;