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):
предупреждение: предложить скобки вокруг «-» в операнде «&» [-Wparentheses]
Предупреждение указывает на строку 13, но, вероятно, оно связано с выражением в строке 9.
Есть решение?