observable: Fix dangling use in #as_blocking
am: f2bfb6033a

Change-Id: I0f973d19e1b928aab55583ea49476742bb23a776
diff --git a/Rx/v2/src/rxcpp/rx-observable.hpp b/Rx/v2/src/rxcpp/rx-observable.hpp
index 4f42007..7e3d567 100644
--- a/Rx/v2/src/rxcpp/rx-observable.hpp
+++ b/Rx/v2/src/rxcpp/rx-observable.hpp
@@ -174,22 +174,26 @@
         std::mutex lock;
         std::condition_variable wake;
         bool disposed = false;
-        rxu::error_ptr error;
 
         auto dest = make_subscriber<T>(std::forward<ArgN>(an)...);
 
+        rxu::error_ptr error;
+        bool has_error = false;
+
         // keep any error to rethrow at the end.
+        // copy 'dest' by-value to avoid using it after it goes out of scope.
         auto scbr = make_subscriber<T>(
             dest,
-            [&](T t){dest.on_next(t);},
-            [&](rxu::error_ptr e){
+            [dest](T t){dest.on_next(t);},
+            [dest,&error,&has_error,do_rethrow](rxu::error_ptr e){
                 if (do_rethrow) {
+                    has_error = true;
                     error = e;
                 } else {
                     dest.on_error(e);
                 }
             },
-            [&](){dest.on_completed();}
+            [dest](){dest.on_completed();}
             );
 
         auto cs = scbr.get_subscription();
@@ -208,7 +212,7 @@
                 return disposed;
             });
 
-        if (error) {rxu::rethrow_exception(error);}
+        if (has_error) {rxu::rethrow_exception(error);}
     }
 
 public: