The technical reason is that using
will only import anything that is currently visible into the current namespace.
If you're include
ing a file after using
, you introduce a "weird" order dependency. Of course, this could be what you want, so it is not forbidden by the language. However, you're effectively changing the meaning of headers you're including after the using, since you're exposing the header to a different context (and name lookup might find other names, depending on the context). Name lookup rules can sometimes be subtle, and you don't want to introduce subtleties in someone else's code.
There's an excellent discussion of this in the book "C++ Coding Standards" (Sutter, Alexandrescu), Chapter 59: "Don't write namespace usings in a header file or before an #include"