Microsoft Visual C++ 2005 SP1 Template bug

Back to programming

// 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;
}