Используя gcc (4.7.2 здесь), я получаю предупреждения о неиспользуемых автоматических переменных, но не о других переменных:
// cvars.h
#ifndef CVARS_H_
#define CVARS_H_
const auto const_auto = "const_auto";
const char const_char_array[] = "const_char_array";
const char * const_char_star = "const_char_star";
const char use_me = 'u';
#endif // CVARS_H_
//---
//comp_unit.cpp
#include "cvars.h"
void somef()
{
//const_auto // commented out - unused
use_me; // not using any of the others either
}
// compile with $ g++ -std=c++11 -Wunused-variable -c comp_unit.cpp
// gcc outputs warning: ‘cvars::const_auto’ defined but not used [-Wunused-variable]
// but does not complain about the other variables
Это несоответствие в GCC?
1.1 Если да, что должно происходить во всех случаях: предупреждение или отсутствие предупреждения?
1.2 Если нет, то в чем причина различий в поведении?
Примечание: что касается 1.1, я полагаю, что в этом случае не должно быть напечатано предупреждение (это то, что делает Clang). В противном случае любой модуль компиляции, включающий заголовок, определяющий константу, но не использующий все константы внутри, будет содержать много предупреждений.
Эти предупреждения полностью зависят от реализации, поэтому «не следует». Но, да, я согласен: константы в идеале не будут генерировать эти предупреждения, даже если они объявлены с использованием auto
,
Поскольку я могу воспроизвести ваши наблюдения в GCC 4.7 и GCC 4.8.0, но не в GCC 4.8.1 или 4.9, я бы сказал, что ребята из GNU тоже согласятся. На самом деле, я верю, что вы видите ошибка 57183.