Посмотрите на следующий код:
int main(int argc, char* argv[])
{
// This works: (Disable Lang Ext = *Yes* (/Za))
wchar_t wc0 = L'\0';
wchar_t wc_ = L'';
assert(wc0 == wc_);
// This doesn't compile (VC++ 2010):
char c0 = '\0';
char c_ = ''; // error C2137: empty character constant
assert(c0 == c_);
return 0;
}
Почему компилятор разрешает определять пустой литерал символ для широких символов? Это не имеет смысла для широкого, так как это не имеет смысла для char
, где компилятор отмечает ошибку.
Разрешено ли это стандартом?