#include <iostream>
#include <list>
namespace NS1
{
template < class T>
class Base
{
protected :
Base( )
{
instances.push_back ( static_cast < T* > ( this ) ) ;
}
private :
static std:: list < T* > instances;
} ;
namespace NS1_1
{
template < class U>
class Intermediary : public Base< U>
{
protected :
Intermediary( )
: Base< U> ( )
{
}
} ;
class Derived : public Intermediary< Derived>
{
public :
Derived( )
: Intermediary< Derived> ( )
{
}
} ;
}
}
template <> std:: list < NS1:: NS1_1 :: Derived * > NS1:: Base < NS1:: NS1_1 :: Derived > :: instances ;
int main( )
{
NS1:: NS1_1 :: Derived d;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bGlzdD4KCm5hbWVzcGFjZSBOUzEgCnsKICAgIHRlbXBsYXRlIDxjbGFzcyBUPgogICAgICAgIGNsYXNzIEJhc2UKICAgICAgICB7ICAgCiAgICAgICAgcHJvdGVjdGVkOgogICAgICAgICAgICBCYXNlKCkKICAgICAgICAgICAgeyAgIAogICAgICAgICAgICAgICAgaW5zdGFuY2VzLnB1c2hfYmFjayhzdGF0aWNfY2FzdDxUKj4odGhpcykpOwogICAgICAgICAgICB9ICAgCiAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgc3RhdGljIHN0ZDo6bGlzdDxUKj4gaW5zdGFuY2VzOwogICAgICAgIH07ICAKCiAgICBuYW1lc3BhY2UgTlMxXzEKICAgIHsgICAKICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVT4KICAgICAgICAgICAgY2xhc3MgSW50ZXJtZWRpYXJ5IDogcHVibGljIEJhc2U8VT4KICAgICAgICB7ICAgCiAgICAgICAgcHJvdGVjdGVkOgogICAgICAgICAgICBJbnRlcm1lZGlhcnkoKQogICAgICAgICAgICAgICAgOkJhc2U8VT4oKQogICAgICAgICAgICB7ICAgCiAgICAgICAgICAgIH0gICAKICAgICAgICB9OyAgCgogICAgICAgIGNsYXNzIERlcml2ZWQgOiBwdWJsaWMgSW50ZXJtZWRpYXJ5PERlcml2ZWQ+CiAgICAgICAgeyAgIAogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgRGVyaXZlZCgpCiAgICAgICAgICAgICAgICA6SW50ZXJtZWRpYXJ5PERlcml2ZWQ+KCkKICAgICAgICAgICAgeyAgIAogICAgICAgICAgICB9ICAgCiAgICAgICAgfTsgIAogICAgfSAgIAp9Cgp0ZW1wbGF0ZSA8PiBzdGQ6Omxpc3Q8TlMxOjpOUzFfMTo6RGVyaXZlZCo+IE5TMTo6QmFzZTxOUzE6Ok5TMV8xOjpEZXJpdmVkPjo6aW5zdGFuY2VzOwoKaW50IG1haW4oKQp7CiAgICBOUzE6Ok5TMV8xOjpEZXJpdmVkIGQ7CiAgICByZXR1cm4gMDsKfQo=