I have an idea about what might be happening. Maybe the windows compiler treats the excess parameter as a warning instead of an error like gcc does. So it just ignores the second parameter.
Do you get a warning when you compile?
Does the entire message print out on the terminal? Or just the first part (before the comma)?
It would also possibly explain why it doesn't work when you switch the order of the string literal and the test since then the first (really only) parameter would always be true, which is pointless for an assert.
When I compile using the comma operator, no warning even if the assert is not triggered as it should. No warning if the "parameters" are swapped or not.
And the entire message prints out, including the test condition and the text message.
It's extremely unlikely (impossible?) that it's the "comma operator". If it was then it would always be true (if the string literal is last). It's far more likely that it is interpreted as two parameters. Hopefully someone else will try it so we can get a second opinion.
The comma is an operator if and only if it is part of an expression; otherwise it is a separator.
The Microsoft compiler/preprocessor generates a warning (if warnings are not suppressed):
warning C4002: too many actual parameters for macro 'assert' https://rextester.com/SUR83596