task queue::pop( ) { Q_AUTO_UNIQUE_LOCK( pimpl_->mutex_, Q_HERE, "queue::pop" ); if ( pimpl_->queue_.empty( ) ) { /* TODO: , "queue::pop: Queue empty" */ Q_THROW( queue_exception( ) ); } task task = std::move( pimpl_->queue_.front( ) ); pimpl_->queue_.pop( ); return std::move( task ); }
Q_TEST_MAKE_SCOPE( fail ); /* * * exception_ptr -> tuple< T... > * * exception_ptr -> P< tuple< T... > > * * E -> tuple< T... > * * E -> P< tuple< T... > > */ TEST_F( fail, exception_ptr_to_value ) { run( q::with( queue ) .then( EXPECT_CALL_WRAPPER( [ ]( ) -> int { Q_THROW( Error( ) ); } ) ) .then( EXPECT_NO_CALL( int, int )( 4711 ) ) .fail( EXPECT_CALL_WRAPPER( [ ]( std::exception_ptr e ) { return 17; } ) ) .then( EXPECT_CALL_WRAPPER( [ ]( int value ) { EXPECT_EQ( 17, value ); } ) ) ); }