次のメタ関数は、ASCII 図形文字に対応する ASCII 制御文字コードを返します。
| 0 1 2 3 4 5 6 | template <int C> struct ctrl {   static const char value = C ^ 0x40; }; | 
これだけでも構わないのですが、有効なCの値の範囲は0x3fから0x5fまでです。C++11以降であれば、static_assertを使ってエラーチェックを行った方がよいと思います。C++03までであれば、Boost C++ LibrariesのBOOST_STATIC_ASSERTを使うとよいでしょう。
せっかくですので関数版も作ってみましょう。
| 0 1 2 3 4 5 6 7 | template <typename T> T ctrl(T c) {   assert(0x3f <= c && c <= 0x5f);   return c ^ 0x40; } | 
一応、char型以外にもwchar_t型、char16_t型、char32_t型、char8_t型も使えるようにテンプレートにしましたが、単なる整数値を扱うだけなのでint型でもいいかもしれません。
また、今回のメタ関数や関数が通用するのはASCIIやISO 646互換の文字コードだけです。より安全にするには、あらかじめ定義されたマクロ__STDC_ISO_10646__が定義されていることを#ifdefで判定するようにした方がよいでしょう。






