В GCC этот код не будет компилироваться, потому что T затеняется, однако в VS2005 он компилируется без предупреждений, так какие предположения делает компилятор VS?
template<typename T>
class Foo
{
template<typename T>
void Bar(const T& bar)
{
...
}
};