After r284797 builins are treated like textual includes. When compiling for ObjC++, the in-memory header file generated for the modules is composed only of #import's instead of includes. That could block some textual includes to happen because #import's will not re-enter headers already handled by other #import's.
Use #include when the header in question is a built-in.
I don't think this is true in general. For a textual header, there could be hundreds or thousands of loaded modules that use it. If all header files in a project start with
... which is configured to be a textual header for whatever reason and contains a #pragma once, we would get into that situation for at least that one header. While a vector might be OK (as the number of entries should at least grow only linearly with the size of the entire codebase), quadratic-time algorithms over it probably won't be. Perhaps a sorted vector instead?