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