I am getting a -Wunused-but-set-variable warning with GCC v4.6 with the code below:
for ( auto i : f.vertexIndices ) {
Sy_MatrixFuzzyHashable< Vector3f > wrapper( cp );
if ( !vMapper.contains( wrapper ) ) {
mesh.vertexNormals() << cp;
i.normal = mesh.vertexNormals().size() - 1;
} else {
i.normal = vMapper.value( wrapper );
}
}
The warning specifically is:
warning: variable 'i' set but not used [-Wunused-but-set-variable]
The warning would make sense if i was a copy of an element, but since vertexIndices is a QList object (an STL-compliant Qt container class) the range-based for loop should call the begin() and end() iterator getters, which will always return a non-const iterator (as long as the container is non-const – which it is).
I can’t currently test if it is working as I think it should because I’m changing my code base to take advantage of the new C++11 features, so nothing compiles yet. But I was hoping someone could tell me if this warning is is nonsense, or if I have misunderstood auto and range-based for loops…
I think the issue is that your for loop, as written like this:
is getting back a copy of the stored vertex, not a reference to it. The compiler warning here says that you’re then setting the value of
ibut not reading it because you’re modifying the temporary copy rather than the stored vertex.If you change it to
then this problem should go away, since you’re actually modifying the vertices stored internally.
Hope this helps!