次のコードは、Visual Studio 2010 で警告 C4127 (条件式は定数) を生成します (ここで、alias_wchar_t は wchar_t のエイリアスです)。
if (sizeof(alias_wchar_t) == sizeof(wchar_t)) // warning occurs here
{
// do stuff
}
else
{
// do other stuff
}
警告を抑制する以外に、これを解決する最もエレガントな方法は何ですか?
私が思いついた最善の解決策は、条件を静的ブールに詰め込み、それを条件として使用することです。if-else の上下にかなりの量のコードがあるため、変数のスコープをできるだけ制限するために、全体を中かっこで囲みます。
// <snip>
{
static bool isSameSize = (sizeof(alias_wchar_t) == sizeof(wchar_t));
if (isSameSize)
{
// do stuff
}
else
{
// do other stuff
}
}
// <snip>
しかし、これはかなりひどい気がします。これは、実行時ではなくコンパイル時に解決できるように思われますが、プリプロセッサは sizeof を認識していません。これを解決するためのよりクリーンでエレガントな方法はありますか?