I thought that we had a consensus to defer system header includes at least to after a .cpp's corresponding .h to verify that the .h stands on its own and can safely be included anywhere without prerequisite includes. The header should do its own include of anything it can't just as easily forward declare.

I prefer to put third party and then system includes as the very last includes for similar (but weaker) reasons, but I don't think I ever got buy-in for that extreme position.