あー、ごめんなさい、DefaultAllocator 継承すると、C++で参照を push したときにコピーされる。
Sqrat::NoConstructor を継承してください。

ポインタを渡してる場合は、アロケータの処理は使わずに sq_setinstanceup() してるだけなので、
シングルトンをC++側からポインタで設定する分には NoConstructor で問題ありませんでした。
ただ New 防止は一切機能してないのでそれだけ足す形で使うのが妥当です

なお、BindInstance() はオブジェクトの protected 関数なので内部からよぶためのものです。外部から直接読んだらそりゃコンパイルエラーです。
SetInstance() はテーブル用の public 関数で、中身はBindInstance を非static指定で呼び出してるだけです。

テンプレートは基本、全部ソースを読んでからつかうものですよ。
sqrat は、そのままだと C++ 側からポインタ渡す場合のテンプレートに解放処理が一切入ってないので、
シングルトンならいいんですが、それ以外だとあっさりメモリリークします。
あと、インスタンスの型処理が全く行われてないとかいろいろ実装がおかしい部分があるので、
そのあたり全部直してからでないと使うの危険なのでご注意を。