#include "a.h" Bar *bar_x; namespace unrelated { struct Foo { short val; }; } struct ContainsAnotherFoo { class Foo { long val; }; }; // The type of `foo_x` should not refer to any of the above classes, none of // which are named `Foo` in the global scope. Foo *foo_x; template class Template { T templateField; }; Template *template_foo; // Instantiation of the template with unrelated classes named `Foo` should not // get mixed up with the instantiation above. template class Template; template class Template;