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