summaryrefslogtreecommitdiff
path: root/dev-util/electron/files/chromium-56-gcc4.patch
blob: e3188668ce5aed183ef66bf02827370872ffeaa7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
From 888874f761fdd69bb9448b3905627289b5fd66dd Mon Sep 17 00:00:00 2001
From: floppymaster <floppymaster@gmail.com>
Date: Thu, 19 Jan 2017 20:20:45 -0800
Subject: [PATCH] Allow GCC 4.9 to compile Chromium

In order to implicit cast an lvalue to an rvalue when returning
from a function, the return type and type of variable in the return
statement previously had to be exactly the same. When this was not
the case, std::move was required. For instance, when returning a
std::unique_ptr<Derived> variable in a function with a
std::unique_ptr<Base> return type, std::move is required.

DR 1579 changed this, and allows for implicitly converting
to the return type, if the return type has a constructor(T&&), where
T is the type of the local variable being returned. DR 1579 was
implemented in GCC 5, but not in GCC 4.9 and below. By explicitly
qualifying the local variable with std::move, we allow for compiling
with GCC 4.9 and incur no performance penalty. The code is still
absolutely correct to the word of C++11.

BUG=chromium:682965

See also:
* https://bugs.gentoo.org/show_bug.cgi?id=600288
* https://stackoverflow.com/questions/22018115/converting-stdunique-ptrderived-to-stdunique-ptrbase#comment33375875_22018521
* http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3833.html#1579

Review-Url: https://codereview.webrtc.org/2642053003
Cr-Commit-Position: refs/heads/master@{#16175}
---
 AUTHORS                                               | 1 +
 webrtc/modules/desktop_capture/screen_capturer_x11.cc | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)

--- a/third_party/webrtc/modules/desktop_capture/screen_capturer_x11.cc
+++ b/third_party/webrtc/modules/desktop_capture/screen_capturer_x11.cc
@@ -412,7 +412,7 @@ std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawScreenCapturer(
     return nullptr;
   }
 
-  return capturer;
+  return std::move(capturer);
 }
 
 }  // namespace webrtc
-- 
2.11.0