Parce que renvoyer un const
quelque chose par valeur comme ici ne fait aucune différence avec ou sans.
Par exemple :
const int GetMyInt()
{
int k = 42;
return k;
}
//later..
int ret = GetMyInt();
// modify ret.
Parce que la valeur renvoyée par GetMyInt
sera copié dans ret
de toute façon (sans tenir compte du (N)RVO), ayant GetMyInt
renvoie const
ne fait aucune différence.
Normalement c'est un avertissement car c'est du code superflu mais -Werror
transforme chaque avertissement en erreur donc voilà.
Le const
qualificateur n'a aucun effet dans cette position, car la valeur renvoyée est une prvalue de type non classe et ne peut donc pas être modifiée de toute façon.
Notez que le message du compilateur indique -Werror=
, ce qui signifie qu'il s'agit normalement d'un avertissement (le code n'est donc pas erroné, mais digne d'avertissement). Il a été transformé en erreur par vos paramètres de compilation.