#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=