#include <iostream>
#include <vector>
using namespace std;
template< typename Self>
class A {
public:
void foo( ) {
Self s;
s._method( s);
}
protected:
virtual void _method( const Self & b) = 0;
};
class _B;
template< typename Self=_B>
class B : public A< Self> {
protected:
void _method( const Self & b) {}
};
class _B : public B< > { };
int main() {
B<>().foo();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnRlbXBsYXRlPCB0eXBlbmFtZSBTZWxmPgpjbGFzcyBBIHsKcHVibGljOgogICAgdm9pZCBmb28oICkgewogICAgCVNlbGYgczsKICAgIAlzLl9tZXRob2QoIHMpOwogICAgfQoKcHJvdGVjdGVkOgogICAgdmlydHVhbCAgdm9pZCBfbWV0aG9kKCBjb25zdCBTZWxmICYgYikgPSAwOwp9OwoKY2xhc3MgX0I7CgoKdGVtcGxhdGU8IHR5cGVuYW1lIFNlbGY9X0I+CmNsYXNzIEIgOiBwdWJsaWMgQTwgU2VsZj4gewoKcHJvdGVjdGVkOgogICAgdm9pZCBfbWV0aG9kKCBjb25zdCBTZWxmICYgYikge30KfTsKCmNsYXNzIF9CIDogcHVibGljIEI8ID4geyB9OwoKaW50IG1haW4oKSB7CiAgICBCPD4oKS5mb28oKTsKCglyZXR1cm4gMDsKfQ==