#include <iostream>
int a = 0;
template<
class T
>
class Scriptable {
protected:
struct Proxy
{
Proxy() {
std::cout << "Proxy was executed! ID: " << T::id << std::endl;
a++;
}
};
static Proxy proxy_;
} ;
template<
class T
>
typename Scriptable<T>::Proxy Scriptable<T>::proxy_;
class Object : public Scriptable<Object> {
public:
constexpr static auto id = "[Object]";
} ;
int main() {
std::cout << "Done " << a << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKaW50IGEgPSAwOwoKdGVtcGxhdGU8CgljbGFzcyBUCj4KY2xhc3MgU2NyaXB0YWJsZSB7CnByb3RlY3RlZDoKICAgIHN0cnVjdCBQcm94eQogICAgewogICAgICAgIFByb3h5KCkgewoJCQlzdGQ6OmNvdXQgPDwgIlByb3h5IHdhcyBleGVjdXRlZCEgSUQ6ICIgPDwgVDo6aWQgPDwgc3RkOjplbmRsOwoJCQlhKys7CgkJfQogICAgfTsKICAgIHN0YXRpYyBQcm94eSBwcm94eV87Cn0gOwoKdGVtcGxhdGU8CgljbGFzcyBUCj4KdHlwZW5hbWUgU2NyaXB0YWJsZTxUPjo6UHJveHkgU2NyaXB0YWJsZTxUPjo6cHJveHlfOwoKY2xhc3MgT2JqZWN0IDogcHVibGljIFNjcmlwdGFibGU8T2JqZWN0PiB7CnB1YmxpYzoKCWNvbnN0ZXhwciBzdGF0aWMgYXV0byBpZCA9ICJbT2JqZWN0XSI7Cn0gOwoKaW50IG1haW4oKSB7CglzdGQ6OmNvdXQgPDwgIkRvbmUgIiA8PCBhIDw8IHN0ZDo6ZW5kbDsKfQo=