同じPascal好きの人間として>>413のような喧嘩腰はいただけないが、
横から解説させてもらうと、

部分範囲型は type From100To200 = 100..200; とか書けば100から200までしか代入できない型を作れる機能。
このときメモリサイズは最小のものを自動選択。この場合unsigned charかな。
(Pascalでは逆にCのintやlongに相当する予約語が無くて、整数は全部こうして使う。既定義のは当然あるけど)

で、整数以外にも既にあるenum T {A,B,C,D}にもtype T2 = B..C; とかできて、動作は上記同様。
これも大きい方から小さい方への代入はチェックが入る。
整数、enumの他、bool, 文字型も同様。type UpperAlphabet = 'A'..'Z'; とかできる。

そして上記の型すべて、setに使える。(setの下限は0に限らない)

templateでできそうなのを言語仕様に抱え込んで…とか思われるかもしれないが、
こういうのはリテラル定数の扱いにまで影響するので、内心templateでカバーできる範疇外と考えるけど
頭の体操は俺も好きなのでどんどんやってください。