In his 2014 CppCon talk, presenter Jon Kalb shows the following function call:
FooBar( smart_ptr<Foo>( new Foo( f ) ), smart_ptr<Bar>( new Bar( b ) ) );
Under the heading "Smart Pointer 'Gotcha'" he concludes, that this is not exception-safe. Due to the evaluation of function arguments being unordered and unsequenced, there is a window of opportunity, where an exception can cause resources to leak.
While I believe that this was correct at the time the statement was made, I don't think this is still true in C++17, where the evaluation of function arguments is still unordered, yet sequenced with respect to each other.
Question: Is this correct, and if so, is the code posted above exception-safe in C++17?