可変引数テンプレートでの型リスト - init/last

id:DigitalGhostさん作。


initは型リストの前部(最後尾以外)を取り出すメタ関数です。

template <class Seq>
struct init :
    public reverse<typename tail<typename reverse<Seq>::type>::type> {};
init<tuple<int, long, char>>::type
→ tuple<int, long>


lastは型リストの最後尾を取り出すメタ関数です。

template <class Seq>
struct last :
    public head<typename reverse<Seq>::type> {};
last<tuple<int, long, char>>::type
→ char