istringstream makes a copy of its input, which is not very nice for performance. strstream doesn't do bounds checking, which is not very nice for safety (and is deprecated).
Apparently gcc does use final for devirtualization.