Is there any way to get a specific error condition when a C++ stream open fails? That is, whether it failed because the file didn\'t exist, or permissions were wrong, or etc
You can look at the ios flags (badbit, eofbit, failbit, goodbit) for general reasons. Testing will is easier using ios::bad(), ios::fail(), ios::eof(), or ios::good(). The stream can also be set to generate exceptions on error, using ios::exceptions().
Detailed I/O Error Reporting may be available in some implementations, as you point out for GCC. You may have to rely on this behavior for the different compilers. If there is a chance for multiple compilers, make sure to test and probably include preprocessor statements to check the current compiler, etc.
As far as I know, the only other place it's discussed is in proposed TR2 additions.
In Visual Studio fopen and the like set the last-error code value. It can be retrieved with GetLastError(). The result will be one of these values.