http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53930
--- Comment #10 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-07-12 12:18:11 UTC --- (In reply to comment #9) > Correction of typo: > ...So I actually do not redefine std::string again, I just USE the type > defined > in third file. Preprocessing makes the std::string definition from <string> part of your compilation unit, so you _do_ redefine it.