Supprimer l'avertissement de variable inutilisée dans C ++ = & gt; Bug de compilateur ou bug de code?

Actuellement, je suis en utilisant la fonction suivante modèle de supprimer inutilisé de la variable de mises en garde:

template<typename T>
void
unused(T const &) {
  /* Do nothing. */
}

Toutefois, en cas de portage à cygwin à partir de Linux, je suis maintenant en train d'erreurs du compilateur g++ 3.4.4 (Sur linux, je suis 3.4.6, c'est peut-être une correction de bug?):

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

L'argument de la partie inutilisée est un membre de la variable déclarée comme:

  volatile bool readWriteActivated;

Est-ce un bug du compilateur ou un bug dans mon code?

Ici est le minimum de cas de test:

template<typename T>
void unused(T const &) { }

int main() {
  volatile bool x = false;
  unused(!x); //type of "!x" is bool
}

source d'informationauteur WilliamKF