このマクロについて考えてみましょう。
#define MAKE_TEMPLATE(...) template <typename T, __VA_ARGS__ >
引数がゼロの場合、コンパイラはコンマの後に識別子を期待するため、不正なコードが生成されます。実際、VCのプリプロセッサはコンマを削除するのに十分賢いですが、GCCはそうではありません。マクロはオーバーロードできないため、次のように、この特殊なケースで正しく処理するには別のマクロが必要になるようです。
#define MAKE_TEMPLATE_Z() template <typename T>
2番目のマクロを導入せずに動作させる方法はありますか?