次のメタ関数は、ASCII 図形文字に対応する ASCII 制御文字コードを返します。

これだけでも構わないのですが、有効なCの値の範囲は0x3fから0x5fまでです。C++11以降であれば、static_assertを使ってエラーチェックを行った方がよいと思います。C++03までであれば、Boost C++ LibrariesのBOOST_STATIC_ASSERTを使うとよいでしょう。

せっかくですので関数版も作ってみましょう。

一応、char型以外にもwchar_t型、char16_t型、char32_t型、char8_t型も使えるようにテンプレートにしましたが、単なる整数値を扱うだけなのでint型でもいいかもしれません。

また、今回のメタ関数や関数が通用するのはASCIIやISO 646互換の文字コードだけです。より安全にするには、あらかじめ定義されたマクロ__STDC_ISO_10646__が定義されていることを#ifdefで判定するようにした方がよいでしょう。


元ネタ

↑ 7. 文字・文字列・文字コードに関する関数・テンプレート