#ifndef INCLUDED_ERASE_H_ #define INCLUDED_ERASE_H_ #include "append.h" //ERASEIDX template struct EraseIdx; //= //ERASEIDXEMPTY template struct EraseIdx> { using List = TypeList<>; }; //= //ERASEIDXZERO template struct EraseIdx<0, TypeList> { using List = TypeList; }; //= //ERASEIDXNEXT template struct EraseIdx> { using List = typename Prefix< Head, typename EraseIdx>::List >::List; }; //= //ERASEPLAIN template struct Erase; //= //ERASEEMPTY template struct Erase> { using List = TypeList<>; }; //= //ERASEHEAD template struct Erase> { using List = TypeList; }; //= //ERASENEXT template struct Erase> { using List = typename Prefix>::List >::List; }; //= //ERASEALL template struct EraseAll: public Erase {}; //= //ERASEALLTYPES template struct EraseAll> { using List = typename EraseAll>::List; }; //= //ERASEALLNEXT template struct EraseAll> { using List = typename Prefix< Head, typename EraseAll>::List >::List; }; //= //ERASEDUP template struct EraseDup; //= //ERASEDUPEMPTY template <> struct EraseDup> { using List = TypeList<>; }; //= //ERASEDUPHEAD template struct EraseDup> { using UniqueTail = typename EraseDup>::List; using NewTail = typename Erase::List; using List = typename Prefix::List; }; //= #endif