Ну, с GCC следующий код предупреждает, как вы хотите:
struct Foo
{
};
struct Bar
{
Foo f;
};
int main()
{
Bar b; //warning: unused variable 'b'
}
Но если вы добавите конструктор / деструктор в структуру Foo или Bar, даже тривиальную, она не будет предупреждать.
struct Foo
{
Foo() {}
};
struct Bar
{
Foo f;
};
int main()
{
Bar b; //no warning! It calls Foo::Foo() into b.f
}
Итак, самый простой способ восстановить предупреждение - это скомпилировать все соответствующие конструкторы и деструкторы условно:
struct Foo
{
#ifndef TEST_UNUSED
Foo() {}
#endif
};
struct Bar
{
Foo f;
};
int main()
{
Bar b; //warning!
}
Теперь скомпилируйте с g++ -DTEST_UNUSED
, чтобы проверить наличие дополнительных неиспользуемых переменных.
Не самая яркая идея, но она работает.