Q:

C++11 Thread Exception Propogation in Visual Studio (Express 2013)

My question is: Is the following observed behavior consistent with the C++11 spec or is it a Microsoft extension to the language?
In a test program (using Visual Studio Express 2013) I am testing out exception propagation from a function run in thread -- to the parent thread. Without using the prescribed exception pointer stuff it all works OK... and this had me wondering if this is actually a Microsoft Extension to the language going on.
So I set "Disable Language Extensions" and now not even Hello World compiles (C2400: inline assembler syntax error) so I am no closer to knowing if the observed behavior is consistent with the standard.  
Reading some other questions here gives me the impression that the following should not work.
int myFunc() { throw <various types tried here>; }

int main() {
    auto fut = std::async(myFunc);
    //...

    try {
        int retVal = fut.get();
    }
    catch(<corresponding type here>) {

        // matching exception is always caught here in parent 

    }
}

A:

From §30.6.6/17 of the standard, std::future::get()

Throws: the stored exception, if an exception was stored in the shared state.

And from §30.6.8/3 of the standard, when using std::async() with policy std::launch::async,

Any exception propagated from the execution of INVOKE(DECAY_COPY(std::forward<F>(f)), DECAY_COPY(std::forward<Args>(args))...) is stored as the exceptional result in the shared state.

With policy std::launch::deferred, there is no special behavior required for the exception to propagate up as observed.
So yes, this behavior is consistent with the C++11 spec.

