VC10のmake_shared読んだら気分が悪くなった件

えそらんカレンダーに使ってもよかったんだけど単発で。
unique_ptrにもmake_sharedみたいなのがほしいなーと思いました。
id:iorate:20101231:1293806776に、「Variadic Templatesがあれば簡単だよ!」と書かれていました。が、VC10ではまだ使えないようです。ぐぬぬ
じゃあmake_shared読んでみればいいじゃん。

	// TEMPLATE FUNCTION make_shared
template<class _Ty _C_CLASS_ARG0> inline
	shared_ptr<_Ty> make_shared(_ARG0_A0_REFREF)
	{
	//略
	}

もしやこの_C_CLASS_ARG0ってVariadicTemplates相当の独自拡張キーワードが使われているのでは!わくわく!

#define _CLASS_ARG0			_LIST(class _Arg)
#define _C_CLASS_ARG0		_COMMA0	_CLASS_ARG0

おお、それらしくなってきたぞ。あと一息だな!

#define _CDR(x)				_CORE(x) _LCOMMA _LAST(x)
#define _LIST(x)			_FIRST(x) _MCOMMA _CDR(x)

・・・あれ?3つもテンプレート引数使うの??

 #if _NARGS == 0
  #define _CORE(x)				_CORE_0(x)
 #elif _NARGS == 1
  #define _CORE(x)				_CORE_1(x)
 #elif _NARGS == 2
  #define _CORE(x)				_CORE_2(x)
 #elif _NARGS == 3
  #define _CORE(x)				_CORE_3(x)
 #elif _NARGS == 4
  #define _CORE(x)				_CORE_4(x)
...

(;・∀・)

#define _CORE_0(x)
#define _CORE_1(x)
#define _CORE_2(x)
#define _CORE_3(x)				_YNAME(x, 1)
#define _CORE_4(x)				_CORE_3(x), _YNAME(x, 2)

(;;・∀・)
嫌な予感がして参りました。
でもその予感が正しいならば_ARGSはどこで定義してるんだろう、というか_NARGSをある値に固定したら引数の数固定になってしまうわけで、まだ疑問符が消えません。
さらに謎めいているのがヘッダー頭のコメント。

// xfwrap1 internal header
// NOTE: no include guards

// sets up macro arguments for use in the header named by _INCL_FILE

なぜかインクルードガードが使われていない。理由があるのだろうか。
で、grepかけたら

#define _NARGS 1
#include <xfwrap1>
#undef _NARGS

#define _NARGS 2
#include <xfwrap1>
#undef _NARGS

#define _NARGS 3
#include <xfwrap1>
#undef _NARGS

#define _NARGS 4
#include <xfwrap1>
#undef _NARGS
...

……見てはいけないものを見てしまった気がする。
謎の技術は確かに使われていたけど、コピペを防いでいるだけだったわ・・・