I checked in two mistakes that were immediately seen by a guy running clang. I developed this under VS 2013. I would have though MS had fixed this improper leniency by now:
Example 1:
Code:
template <typename X>
class Foo
{
public:
template <typename X> // I shadowed the outer template parameter and yet it compiles
class Bar
{
};
};
Example 2:
Code:
template <typename X>
class Foo
{
public:
template <typename T>
void Bar();
};
Foo<int> x;
x.Bar<int>(); // I need to write x.template Bar<int>() instead, and yet it compiles
ARGH!