#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;
}
