Doing this check at runtime works, but only because there happens to be a constructor accepting two args (stream, int) on JDK6 - even though the `true` constructor doesn't get called, it does get compiled, which would fail if that otherwise-irrelevant constructor didn't exist. Better to do this check in a macro, so that only the correct constructor call is ever compiled.