現在、未使用の変数の警告を抑制するために、次の関数テンプレートを使用しています。
template<typename T>
void
unused(T const &) {
/* Do nothing. */
}
ただし、Linuxからcygwinに移植すると、g ++ 3.4.4でコンパイラエラーが発生します(Linuxでは3.4.6なので、これはバグ修正ですか?):
Write.cpp: In member function `void* Write::initReadWrite()':
Write.cpp:516: error: invalid initialization of reference of type 'const volatile bool&' from expression of type 'volatile bool'
../../src/common/Assert.h:27: error: in passing argument 1 of `void unused(const T&) [with T = volatile bool]'
make[1]: *** [ARCH.cygwin/release/Write.o] Error 1
usedの引数は、次のように宣言されたメンバー変数です。
volatile bool readWriteActivated;
これはコンパイラのバグですか、それとも私のコードのバグですか?
最小限のテストケースは次のとおりです。
template<typename T>
void unused(T const &) { }
int main() {
volatile bool x = false;
unused(!x); // type of "!x" is bool
}