From a6d6f56e67a93ca5ac913f6fdccbe38e675d280a Mon Sep 17 00:00:00 2001 From: Alexander Aprelev Date: Thu, 4 Jan 2018 10:41:54 -0800 Subject: [PATCH] Fix windows build by using lambda capture workaround (flutter/engine#4514) * Fix windows build by using lambda capture workaround * clang format, add todo * clang-format again --- engine/src/flutter/shell/common/shell.cc | 48 +++++++++++++----------- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/engine/src/flutter/shell/common/shell.cc b/engine/src/flutter/shell/common/shell.cc index 7781df5e81..cfa32dc599 100644 --- a/engine/src/flutter/shell/common/shell.cc +++ b/engine/src/flutter/shell/common/shell.cc @@ -331,27 +331,33 @@ void Shell::SetAssetBundlePathInPlatformViewUIThread( *view_existed = false; - IteratePlatformViews([ - view_id, // argument - assets_directory = std::move(assets_directory), // argument - &view_existed, // out - &dart_isolate_id, // out - &isolate_name // out - ](PlatformView * view) - ->bool { - if (reinterpret_cast(view) != view_id) { - // Keep looking. - return true; - } - *view_existed = true; - view->SetAssetBundlePath(assets_directory); - *dart_isolate_id = - view->engine().GetUIIsolateMainPort(); - *isolate_name = view->engine().GetUIIsolateName(); - // We found the requested view. Stop iterating over - // platform views. - return false; - }); + IteratePlatformViews( + [view_id, // argument +#if !defined(OS_WIN) + // Using std::move on const references inside lambda capture is + // not supported on Windows for some reason. + // TODO(https://github.com/flutter/flutter/issues/13908): + // Investigate the root cause of the difference. + assets_directory = std::move(assets_directory), // argument +#else + assets_directory, // argument +#endif + &view_existed, // out + &dart_isolate_id, // out + &isolate_name // out + ](PlatformView* view) -> bool { + if (reinterpret_cast(view) != view_id) { + // Keep looking. + return true; + } + *view_existed = true; + view->SetAssetBundlePath(assets_directory); + *dart_isolate_id = view->engine().GetUIIsolateMainPort(); + *isolate_name = view->engine().GetUIIsolateName(); + // We found the requested view. Stop iterating over + // platform views. + return false; + }); latch->Signal(); }