#include <iostream>
template <typename T> struct extra {};
template <> struct extra<int> {
public:
int get() const;
};
template <typename T>
class base : public extra<T> {
friend class extra<T>;
public:
void set(T data) { data_=data; }
private:
T data_;
};
int extra<int>::get() const{ return static_cast<const base<int>*>(this)->data_;}
int main()
{
base<int> b;
b.set(42);
std::cout << b.get() << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBleHRyYSB7fTsKCnRlbXBsYXRlIDw+IHN0cnVjdCBleHRyYTxpbnQ+IHsKcHVibGljOgogICAgaW50IGdldCgpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmNsYXNzIGJhc2UgOiBwdWJsaWMgZXh0cmE8VD4gewogICAgZnJpZW5kIGNsYXNzIGV4dHJhPFQ+OwpwdWJsaWM6CiAgIHZvaWQgc2V0KFQgZGF0YSkgeyBkYXRhXz1kYXRhOyB9CnByaXZhdGU6CiAgICBUIGRhdGFfOwp9OwoKaW50IGV4dHJhPGludD46OmdldCgpIGNvbnN0eyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgYmFzZTxpbnQ+Kj4odGhpcyktPmRhdGFfO30KCmludCBtYWluKCkKewogICAgYmFzZTxpbnQ+IGI7CiAgICAKICAgIGIuc2V0KDQyKTsKICAgIHN0ZDo6Y291dCA8PCBiLmdldCgpIDw8IHN0ZDo6ZW5kbDsKfQo=