そういやどうしてinitializer_listは型にサイズ情報が無いんだろう?
template<typename E>
class initializer_list_base;
template<typename E, int N>
class initializer_list : initializer_list_base<E>;
があったらよくね?