// The bug is inconsistent, there seems to be no
// strict logic.
namespace MyNames
{
template <typename S, typename T>
struct MyPair
{
};
}
template <typename T>
class MyClass
{
public:
class A
{
};
MyNames::MyPair<A, int> f();
MyNames::MyPair<A, A> g();
MyNames::MyPair<A, int> h();
};
template <typename T>
MyNames::MyPair<typename MyClass<T>::A, int>
MyClass<T>::f()
{
return MyNames::MyPair<A, int>();
}
template <typename T>
MyNames::MyPair<typename MyClass<T>::A, typename MyClass<T>::A>
MyClass<T>::g()
{
return MyNames::MyPair<A, A>();
}
template <typename T>
MyNames::MyPair<typename MyClass<T>::A, int>
MyClass<T>::h()
{
return MyNames::MyPair<A, int>();
}
int main()
{
return 0;
}