#pragma once namespace types { template <typename To> struct Convertable { template <typename Self> class type { private: Self const & self() const { return *(Self const *)(void const *)(this); } public: operator To() const; }; }; }