I am using g++ 4.3.0 to compile this example :
#include <vector>
int main()
{
std::vector< int > a;
int b;
}
If I compile the example with maximum warning level, I get a warning that the variable b is not used :
[vladimir@juniper data_create]$ g++ m.cpp -Wall -Wextra -ansi -pedantic
m.cpp: In function ‘int main()’:
m.cpp:7: warning: unused variable ‘b’
[vladimir@juniper data_create]$
The question is : why the variable a is not reported as not used?
What parameters do I have to pass to get the warning for the variable a?
Best Answer
In theory, the default constructor for
std::vector<int>
could have arbitrary side effects, so the compiler cannot figure out whether removing the definition ofa
would change the semantics of the program. You only get those warning for built-in types.A better example is a lock:
Even though
a
is never used after its definition, removing the first line would be wrong.