You shouldn't remove those brackets, in stead you should replace {x} with We(x) for array initializers and W_t(x) otherwise. Some of these had been overlooked before, but I went through the code and fixed all of them some time ago (for a mingw port, actually). I don't think that's publicly available yet though.
WCHAR array[] = { {'f'},{'u'},{'n'},{0} }; → WCHAR array[] = { We('f'),We('u'),We('n'),We(0) };
array[0] = {'r'}; → array[0] = W_t('r');
But anyway, yes, they are unfortunately a necessary evil. Some compilers abort if the brackets are there, other compilers abort if they're not there. gcc does both, depending on version/platform. If there was a portable way of specifying 16-bit wchar strings directly we wouldn't have to mess with all that stuff, but there isn't, so. (I'm aware of gcc's -fshort-wchar option, but that changes the ABI, so we can't use it.)
[Last edited by trick at 01-15-2008 03:57 PM]