As discussed in "Code in headers" on llvm-dev, there are lots of headers with complex code in them. I've moved some complex constructors & destructors to implementation files, using Chromium's C++ Dos and Don'ts as a guide.
These changes are mostly in the Static Analyzer, as some files there take more than 30 seconds to compile.
On the mailing list, Chris Lattner said that we should measure how this affects the performance of the compiler generated by this code. Any idea how we do that?
Eh, Imma drop this patch. It turns out that there's not enough of an improvement here to justify the effort.
I think previous discussions on the mail list have talked about only using emplace_back if the type isn't trivially copyable/moveable.