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