Veuillez considérer le code suivant:
class cls { }; __atsortingbute__((warn_unused_result)) cls fn1() { return cls(); } __atsortingbute__ ((warn_unused_result)) int fn2() { return 1; } int main() { auto x = fn1(); (void)x; auto y = fn2(); (void)y; return 0; }
Lorsque je comstack ceci avec -Wall -Wextra
avec gcc 5.4.0, un avertissement -Wall -Wextra
:
warning: ignoring return value of 'cls fn1()', declared with atsortingbute warn_unused_result [-Wunused-result]
Quelqu’un peut-il me dire ce qui ne va pas?
Pourquoi cet avertissement apparaît pour fn1
malgré la variable x
et pourquoi il n’apparaît pas pour fn2
?
Mise à jour 1 : Avec un peu d’aide, j’ai essayé ceci avec g ++ 4.8.3 – le même résultat. Encore plus – g ++ 3.3.6 produit deux avertissements – pour fn1
et fn2
.
Ce qui “corrige” l’avertissement, c’est … devinez quoi – l’ajout d’un membre de données ou d’une fonction de membre virtuel dans la classe (une fonction non virtuelle n’aide pas). Cela ressemble à un bug du compilateur pour moi.
Mise à jour 2 : L’ajout d’un membre ou d’une fonction virtuelle désactive complètement l’avertissement. fn1();
simplement fn1();
ne produit plus l’avertissement.