Компилирую следующий код:
Код
template<uint32_t pin>
class Pin
{
public:
void Test()
{
if(pin < 16) {
1: g_test &= ~(0x03UL << (pin * 2));
}
else
{
g_test &= ~(0x03UL << ((pin - 16) * 2));
}
}
};
int main()
{
Pin<22> test;
test.Test();
}
На строчку 1 компилятор ругается:
Код
source/main.cpp: In member function 'void Pin<pin>::Test() [with long unsigned int pin = 22ul]':
source/main.cpp:30:12: instantiated from here
source/main.cpp:18:4: warning: left shift count >= width of type [enabled by default]
Код компилируется и работает правильно. Оптимизатор, естественно, выкидывает ненужный код, т.к. pin константа (что видно по листингу).
Как убрать это сообщение?