The next question is: Is it standard-conforming to write the code as I used? I see ICC rejects the code too. If I put ".string_value = …" in additional braces, ICC seems happy, Clang still fails, but MSVC now fails too. Overall, no win.
What is the most correct way to write what I intended? Or maybe constructors are the correct choice here? (Anyway, knowing the trouble is only caused by the aggregate initialization, I am not that bothered now.)