<div dir="ltr">My apologies if this topic is inappropriate; this is my first posting to the list.  I've been playing around with the printers, and I noticed that TypePrinter::printElaboratedBefore sets the printing policy to suppress scope before proceeding to print the type name: <a href="http://clang.llvm.org/doxygen/TypePrinter_8cpp_source.html#l01102">http://clang.llvm.org/doxygen/TypePrinter_8cpp_source.html#l01102</a><div><br></div><div>I presume this is so that the qualifier wouldn't get printed twice, but the problem is when the ElaboratedType is a TemplateSpecialization: in that case, the scope suppression policy applies not just to the type name but also to all the template parameters.  I don't think this is correct, since the template parameters aren't affected by the ElaboratedType qualifier, so they do need to print their own scope if the original policy so requires.</div><div><br></div><div>I'm facing a problem trying to print this code outside of its original namespace:</div><div><br></div><div><div>namespace NS {</div><div>struct A {};</div><div>class B {</div><div>public:</div><div>  virtual void foo(std::vector<A> &) = 0;</div><div>};</div><div>}</div></div><div><br></div><div>When I try to print foo in a different context, I get "std::vector<A>" for the result, which is invalid outside NS.  But if I just use "foo(vector<A>&)" as the input (of course, with the appropriate using directive above it), then printing foo yields, correctly, "vector<NS::A>".</div><div><br></div><div>(The upstream problem manifestation can be seen, eg, here: <a href="https://github.com/dekimir/RamFuzz/issues/1">https://github.com/dekimir/RamFuzz/issues/1</a>)</div></div>