https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84897
Eric Gallager <egallager at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |egallager at gcc dot gnu.org --- Comment #4 from Eric Gallager <egallager at gcc dot gnu.org> --- (In reply to David Malcolm from comment #0) > Reddit user "Boojum" suggested: > > > As far as other paper cuts, here's one that catches me > > surprisingly frequently: > > #include <string> > int main() { > string x("foo"); > } > > > Obviously, I "forgot" to either qualify string as std::string, > > add using namespace std;, or add using std::string;. > > > > Here's what GCC 7.2 tells me (header paths elided): > > namespace.cpp: In function ‘int main()’: > namespace.cpp:3:5: error: ‘string’ was not declared in this scope > string x("foo"); > ^~~~~~ > namespace.cpp:3:5: note: suggested alternatives: > In file included from .../string:39:0, > from namespace.cpp:1: > .../stringfwd.h:74:33: note: ‘std::__cxx11::string’ > typedef basic_string<char> string; > ^~~~~~ > .../stringfwd.h:74:33: note: ‘std::__cxx11::string’ > > > On the other hand, here's what Clang 6 tells me: > > namespace.cpp:3:5: error: unknown type name 'string'; did you mean > 'std::string'? > string x("foo"); > ^~~~~~ > std::string > .../stringfwd.h:74:33: note: 'std::string' declared here > typedef basic_string<char> string; > ^ > 1 error generated. > > > Much nicer. It tells me exactly which namespace I probably > > meant to use and proposes a fix-it qualifying the identifier. > Link to this comment is here: https://www.reddit.com/r/programming/comments/84oizv/usability_improvements_in_gcc_8/dvrj48o/