Следующий код генерирует предупреждение C4127 (условное выражение постоянное) в Visual Studio 2010 (где alias_wchar_t является псевдонимом для wchar_t):
if (sizeof(alias_wchar_t) == sizeof(wchar_t)) // warning occurs here
{
// do stuff
}
else
{
// do other stuff
}
Какой самый элегантный способ решить эту проблему, если не подавить предупреждение?
Лучшее решение, с которым я столкнулся, состоит в том, чтобы наложить условное выражение на статический bool и использовать это как условие. Там очень много кода выше и ниже if-else, поэтому я переношу все это в фигурные скобки, чтобы максимально ограничить область действия переменной:
// <snip>
{
static bool isSameSize = (sizeof(alias_wchar_t) == sizeof(wchar_t));
if (isSameSize)
{
// do stuff
}
else
{
// do other stuff
}
}
// <snip>
Это выглядит довольно грубо. Кажется, что он должен быть разрешен во время компиляции, а не во время выполнения, но препроцессор не знает о sizeof. Есть ли более чистый, более элегантный способ решить эту проблему?