#include <iostream>
template<typename T>
struct Iterator {};
template<typename T>
struct Node {};
template<class T>
class SinglyLinkedList
{
public:
typedef struct Iterator<T> Iterator;
SinglyLinkedList() {};
Iterator Begin(); //Error
::Iterator<T> End();
private:
Node<T> * m_pHead;
};
template<class T>
Iterator<T> SinglyLinkedList<T>::Begin()
{
return Iterator();
}
template<class T>
Iterator<T> SinglyLinkedList<T>::End()
{
return Iterator();
}
int main()
{
SinglyLinkedList<int> ll;
Iterator<int> bar = ll.Begin();
bar = ll.End();
SinglyLinkedList<int>::Iterator foo = ll.Begin();
foo = ll.End();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kc3RydWN0IEl0ZXJhdG9yIHt9OwoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kc3RydWN0IE5vZGUge307Cgp0ZW1wbGF0ZTxjbGFzcyBUPgpjbGFzcyBTaW5nbHlMaW5rZWRMaXN0CnsKcHVibGljOgogICAgdHlwZWRlZiBzdHJ1Y3QgSXRlcmF0b3I8VD4gSXRlcmF0b3I7CiAgICAKICAgIFNpbmdseUxpbmtlZExpc3QoKSB7fTsKCiAgICBJdGVyYXRvciBCZWdpbigpOyAvL0Vycm9yCiAgICA6Okl0ZXJhdG9yPFQ+IEVuZCgpOwogICAgCnByaXZhdGU6CiAgICBOb2RlPFQ+ICogbV9wSGVhZDsKfTsKCgp0ZW1wbGF0ZTxjbGFzcyBUPgpJdGVyYXRvcjxUPiBTaW5nbHlMaW5rZWRMaXN0PFQ+OjpCZWdpbigpCnsKICAgIHJldHVybiBJdGVyYXRvcigpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBUPgpJdGVyYXRvcjxUPiBTaW5nbHlMaW5rZWRMaXN0PFQ+OjpFbmQoKQp7CiAgICByZXR1cm4gSXRlcmF0b3IoKTsKfQoKaW50IG1haW4oKQp7CiAgICBTaW5nbHlMaW5rZWRMaXN0PGludD4gbGw7CiAgICBJdGVyYXRvcjxpbnQ+IGJhciA9IGxsLkJlZ2luKCk7CiAgICBiYXIgPSBsbC5FbmQoKTsKICAgIAogICAgU2luZ2x5TGlua2VkTGlzdDxpbnQ+OjpJdGVyYXRvciBmb28gPSBsbC5CZWdpbigpOwogICAgZm9vID0gbGwuRW5kKCk7CiAgICByZXR1cm4gMDsKfQ==