2005-09-21 関数の引数の正当性は、可能な限り確認した方が、信頼性の高いプログラムになることはいうまでもありません。しかし、引数の確認に伴うオーバーヘッドも馬鹿にならないため、デバッグ時のみ確認を行うようにし、最終出荷時には確認を省略することがよくあります。そんなときに役立つのがおなじみのassertマクロ*1です。 さて、Cの場合には、引数といえば関数ぐらいしかない(厳密には関数形式マクロもある)わけですが、C++には、もうひとつ重要な引数を持つ言語機能があります。それはテンプレートです。関数の引数の正当性を確認すべきであるとするなら、当然、テンプレート引数の正当性も確認すべきです。 ところが、テンプレート引数はコンパイル時に作用するものですから、assertマクロで実行時に確認するのは純粋なオーバーヘッドになってしまいます。何とかコンパイル時に確認する方法があれば、実行時には全