#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;
} ;
class Derived : public Base< Derived>
{
public :
Derived( )
: Base< Derived> ( )
{
}
} ;
}
template <> std:: list < NS1:: Derived * > NS1:: Base < NS1:: Derived > :: instances ;
int main( )
{
NS1:: Derived d;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bGlzdD4KCm5hbWVzcGFjZSBOUzEgCnsKICAgIHRlbXBsYXRlIDxjbGFzcyBUPgogICAgICAgIGNsYXNzIEJhc2UKICAgICAgICB7ICAgCiAgICAgICAgcHJvdGVjdGVkOgogICAgICAgICAgICBCYXNlKCkKICAgICAgICAgICAgeyAgIAogICAgICAgICAgICAgICAgaW5zdGFuY2VzLnB1c2hfYmFjayhzdGF0aWNfY2FzdDxUKj4odGhpcykpOwogICAgICAgICAgICB9ICAgCiAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgc3RhdGljIHN0ZDo6bGlzdDxUKj4gaW5zdGFuY2VzOwogICAgICAgIH07ICAKCiAgICAgICAgY2xhc3MgRGVyaXZlZCA6IHB1YmxpYyBCYXNlPERlcml2ZWQ+CiAgICAgICAgeyAgIAogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgRGVyaXZlZCgpCiAgICAgICAgICAgICAgICA6QmFzZTxEZXJpdmVkPigpCiAgICAgICAgICAgIHsgICAKICAgICAgICAgICAgfSAgIAogICAgICAgIH07ICAKfQoKdGVtcGxhdGUgPD4gc3RkOjpsaXN0PE5TMTo6RGVyaXZlZCo+IE5TMTo6QmFzZTxOUzE6OkRlcml2ZWQ+OjppbnN0YW5jZXM7CgppbnQgbWFpbigpCnsKICAgIE5TMTo6RGVyaXZlZCBkOwogICAgcmV0dXJuIDA7Cn0K