调高警告级别后发现了一个关于未引用变量的有关问题

调高警告级别后发现了一个关于未引用变量的问题
假设函数如下:
void fun()
{
  std::stack<int> helper;
  int i;
}

VC2010 编译时只提 i 为未引用变量而没说helper。把i定义注释掉,编译通过,即便helper也为未使用变量。

这是为什么?
和模版有关?

------解决方案--------------------
类,包括模板类,有自己的构造函数与析构函数
因此哪怕仅仅只是定义,也可以实现一些功能

编译器没那么智能,能看出类的构造函数与析构函数是不是就是你想要的功能
基本类型只是单纯的压栈,编译器能够判断这东西是不是没啥用,类就无能为力了
------解决方案--------------------
但是编译器插入了构造函数,析构函数的调用,所以不算未使用的变量。