Посмотрите на следующий код:
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, где компилятор отмечает ошибку.
Разрешено ли это стандартом?