Il seguente codice genera avviso C4127 (espressione condizionale è costante) in Visual Studio 2010 (dove alias_wchar_t è un alias per wchar_t):C4127: espressione condizionale è costante
if (sizeof(alias_wchar_t) == sizeof(wchar_t)) // warning occurs here
{
// do stuff
}
else
{
// do other stuff
}
Qual è il modo più elegante per risolvere questo , a corto di sopprimere l'avvertimento?
La soluzione migliore che ho trovato è quella di inserire il condizionale in un bool statico e usarlo come condizione. C'è una buona quantità di codice di sopra e al di sotto del if-else, così ho avvolgere il tutto in parentesi graffe per limitare l'ambito della variabile il più possibile:
// <snip>
{
static bool isSameSize = (sizeof(alias_wchar_t) == sizeof(wchar_t));
if (isSameSize)
{
// do stuff
}
else
{
// do other stuff
}
}
// <snip>
questo si sente piuttosto grossolano però. Sembra che dovrebbe essere risolvibile in fase di compilazione piuttosto che in runtime, ma il preprocessore non conosce la dimensione di. C'è un modo più pulito, più elegante per risolvere questo?
nota: C++ 17 sta prendendo in considerazione qualcosa di simile a 'se constexpr' che risolverebbe questo problema –