From 18ab5a523a50798d420829681bb6157d530c3bc4 Mon Sep 17 00:00:00 2001 From: Tomas Popela Date: Wed, 18 Oct 2017 13:28:53 +0200 Subject: [PATCH 01/10] Update the chromium-lastest.py to always download the policy templates They are changing across the releases - always download the latest one. --- chromium-latest.py | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/chromium-latest.py b/chromium-latest.py index 88703db..242e8d8 100755 --- a/chromium-latest.py +++ b/chromium-latest.py @@ -42,7 +42,7 @@ chromium_root_dir = "." version_string = "stable" name = 'Chromium Latest' -script_version = 0.8 +script_version = 0.9 my_description = '{0} {1}'.format(name, script_version) @@ -205,6 +205,26 @@ def download_chrome_latest_rpm(arch): remove_file_if_exists (chrome_rpm) sys.exit(1) +def remove_and_download_latest_policy_templates(): + + policy_file = 'policy_templates.zip' + path = 'https://dl.google.com/dl/edgedl/chrome/policy/%s' % policy_file + remove_file_if_exists(policy_file) + + # Let's make sure we haven't already downloaded it. + if os.path.isfile("./%s" % policy_file): + print "%s already exists!" % policy_file + else: + print "Downloading %s" % path + # Perhaps look at using python-progressbar at some point? + info=urllib.urlretrieve(path, policy_file, reporthook=dlProgress)[1] + urllib.urlcleanup() + print "" + if (info["Content-Type"] != "application/octet-stream"): + print 'Policy templates are not on servers.' % version_string + remove_file_if_exists (policy_file) + sys.exit(1) + # This is where the magic happens if __name__ == '__main__': @@ -291,6 +311,9 @@ if __name__ == '__main__': download_version(chromium_version) + # Always download the newest policy templates + remove_and_download_latest_policy_templates() + # Lets make sure we haven't unpacked it already latest_dir = "%s/chromium-%s" % (chromium_root_dir, chromium_version) if (args.clean and os.path.isdir(latest_dir)): From b36884aebdb5c98e6ad3c515020919bbccbcda53 Mon Sep 17 00:00:00 2001 From: Tomas Popela Date: Thu, 19 Oct 2017 14:08:03 +0200 Subject: [PATCH 02/10] Improve the chromium-latest.py script - Download the policy templates per release channel - Only run the nacl_versions when not running on python 2.6 as the toolchain_build modules are not python 2.6 compatible --- chromium-latest.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/chromium-latest.py b/chromium-latest.py index 242e8d8..2efe44b 100755 --- a/chromium-latest.py +++ b/chromium-latest.py @@ -165,6 +165,10 @@ def download_version(version): download_file_and_compare_hashes ('chromium-%s-testdata.tar.xz' % version) def nacl_versions(version): + + if sys.version_info[0] == 2 and sys.version_info[1] == 6: + return + myvars = {} chrome_dir = './chromium-%s' % version with open(chrome_dir + "/native_client/tools/REVISIONS") as myfile: @@ -205,10 +209,16 @@ def download_chrome_latest_rpm(arch): remove_file_if_exists (chrome_rpm) sys.exit(1) -def remove_and_download_latest_policy_templates(): +def remove_and_download_latest_policy_templates(version_string): policy_file = 'policy_templates.zip' - path = 'https://dl.google.com/dl/edgedl/chrome/policy/%s' % policy_file + if version_string != 'stable': + if version_string == 'unstable': + policy_file = "dev_" + policy_file + else: + policy_file = version_string + "_" + policy_file + + path = 'https://dl.google.com/chrome/policy/%s' % policy_file remove_file_if_exists(policy_file) # Let's make sure we haven't already downloaded it. @@ -312,7 +322,7 @@ if __name__ == '__main__': download_version(chromium_version) # Always download the newest policy templates - remove_and_download_latest_policy_templates() + remove_and_download_latest_policy_templates(version_string) # Lets make sure we haven't unpacked it already latest_dir = "%s/chromium-%s" % (chromium_root_dir, chromium_version) From 7abe45ef20659a9277d79093f4e1d8d96194f779 Mon Sep 17 00:00:00 2001 From: Tom Callaway Date: Tue, 24 Oct 2017 22:25:28 -0400 Subject: [PATCH 03/10] do not attempt to use std=c++14 on epel7 --- chromium-62.0.3202.62-epel7-noc++14.patch | 12 ++++++++++++ chromium.spec | 11 ++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 chromium-62.0.3202.62-epel7-noc++14.patch diff --git a/chromium-62.0.3202.62-epel7-noc++14.patch b/chromium-62.0.3202.62-epel7-noc++14.patch new file mode 100644 index 0000000..57d24b0 --- /dev/null +++ b/chromium-62.0.3202.62-epel7-noc++14.patch @@ -0,0 +1,12 @@ +diff -up chromium-62.0.3202.62/tools/gn/bootstrap/bootstrap.py.epel7-noc++14 chromium-62.0.3202.62/tools/gn/bootstrap/bootstrap.py +--- chromium-62.0.3202.62/tools/gn/bootstrap/bootstrap.py.epel7-noc++14 2017-10-24 22:20:25.881183458 -0400 ++++ chromium-62.0.3202.62/tools/gn/bootstrap/bootstrap.py 2017-10-24 22:20:38.395943374 -0400 +@@ -349,7 +349,7 @@ def write_gn_ninja(path, root_gen_dir, o + '-pipe', + '-fno-exceptions' + ]) +- cflags_cc.extend(['-std=c++14', '-Wno-c++11-narrowing']) ++ cflags_cc.extend(['-Wno-c++11-narrowing']) + if is_aix: + cflags.extend(['-maix64']) + ldflags.extend([ '-maix64 -Wl,-bbigtoc' ]) diff --git a/chromium.spec b/chromium.spec index f9ec65e..b5aec69 100644 --- a/chromium.spec +++ b/chromium.spec @@ -119,7 +119,7 @@ Name: chromium%{chromium_channel}%{?freeworld:-freeworld} Name: chromium%{chromium_channel} %endif Version: %{majorversion}.0.3202.62 -Release: 1%{?dist} +Release: 1%{?dist}.1 Summary: A WebKit (Blink) powered web browser Url: http://www.chromium.org/Home License: BSD and LGPLv2+ and ASL 2.0 and IJG and MIT and GPLv2+ and ISC and OpenSSL and (MPLv1.1 or GPLv2 or LGPLv2) @@ -216,6 +216,8 @@ Patch62: chromium-gcc5-r3.patch Patch63: chromium-gn-bootstrap-r17.patch # Fix _cplusplus conditional Patch64: chromium-62.0.3202.62-correct-cplusplus-check.patch +# epel7 does not know about c++14 +Patch65: chromium-62.0.3202.62-epel7-noc++14.patch ### Chromium Tests Patches ### Patch100: chromium-46.0.2490.86-use_system_opus.patch @@ -667,6 +669,7 @@ udev. %patch59 -p1 -b .gcc-nc %patch60 -p1 -b .nonullptr %patch61 -p1 -b .another-rvalue-fix +%patch65 -p1 -b .epel7-noc++14 %endif %patch50 -p1 -b .pathfix %patch53 -p1 -b .nogccoptmath @@ -806,6 +809,9 @@ CHROMIUM_CORE_GN_DEFINES+=' treat_warnings_as_errors=false linux_use_bundled_bin %ifarch aarch64 CHROMIUM_CORE_GN_DEFINES+=' target_cpu="arm64"' %endif +%if 0%{?rhel} == 7 +CHROMIUM_CORE_GN_DEFINES+=' use_cxx11=true' +%endif export CHROMIUM_CORE_GN_DEFINES CHROMIUM_BROWSER_GN_DEFINES="" @@ -1902,6 +1908,9 @@ getent group chrome-remote-desktop >/dev/null || groupadd -r chrome-remote-deskt %changelog +* Tue Oct 24 2017 Tom Callaway 62.0.3202.62-1.1 +- do not attempt std=c++14 on epel7 + * Wed Oct 18 2017 Tom Callaway 62.0.3202.62-1 - update to 62.0.3202.62 From 2abf30d2cca743fd4e3e0ed01d4b9df315aad65d Mon Sep 17 00:00:00 2001 From: Tomas Popela Date: Wed, 25 Oct 2017 10:30:34 +0200 Subject: [PATCH 04/10] Fix the policy templates handling Basically revert my previous commits as the policy templates are generated during the build. The only thing that we were copying out from the tarballs was the policy templates documentation, but that one is generated as well so use that one and remove the policy_templates zip file from sources --- chromium-latest.py | 30 ------------------------------ chromium.spec | 6 +----- sources | 1 - 3 files changed, 1 insertion(+), 36 deletions(-) diff --git a/chromium-latest.py b/chromium-latest.py index 2efe44b..c77899d 100755 --- a/chromium-latest.py +++ b/chromium-latest.py @@ -209,33 +209,6 @@ def download_chrome_latest_rpm(arch): remove_file_if_exists (chrome_rpm) sys.exit(1) -def remove_and_download_latest_policy_templates(version_string): - - policy_file = 'policy_templates.zip' - if version_string != 'stable': - if version_string == 'unstable': - policy_file = "dev_" + policy_file - else: - policy_file = version_string + "_" + policy_file - - path = 'https://dl.google.com/chrome/policy/%s' % policy_file - remove_file_if_exists(policy_file) - - # Let's make sure we haven't already downloaded it. - if os.path.isfile("./%s" % policy_file): - print "%s already exists!" % policy_file - else: - print "Downloading %s" % path - # Perhaps look at using python-progressbar at some point? - info=urllib.urlretrieve(path, policy_file, reporthook=dlProgress)[1] - urllib.urlcleanup() - print "" - if (info["Content-Type"] != "application/octet-stream"): - print 'Policy templates are not on servers.' % version_string - remove_file_if_exists (policy_file) - sys.exit(1) - - # This is where the magic happens if __name__ == '__main__': @@ -321,9 +294,6 @@ if __name__ == '__main__': download_version(chromium_version) - # Always download the newest policy templates - remove_and_download_latest_policy_templates(version_string) - # Lets make sure we haven't unpacked it already latest_dir = "%s/chromium-%s" % (chromium_root_dir, chromium_version) if (args.clean and os.path.isdir(latest_dir)): diff --git a/chromium.spec b/chromium.spec index f9ec65e..53569ec 100644 --- a/chromium.spec +++ b/chromium.spec @@ -247,7 +247,6 @@ Source7: get_free_ffmpeg_source_files.py Source8: get_linux_tests_names.py # GNOME stuff Source9: chromium-browser.xml -Source10: https://dl.google.com/dl/edgedl/chrome/policy/policy_templates.zip Source11: chrome-remote-desktop@.service Source13: master_preferences @@ -617,7 +616,6 @@ without support for alsa, cups, dbus, gconf, gio, kerberos, pulseaudio, or udev. %prep -%setup -q -T -c -n %{name}-policies -a 10 %setup -q -T -c -n depot_tools -a 2 %if 0%{tests} %setup -q -n chromium-%{version} -b 1 @@ -1317,10 +1315,8 @@ sed -i 's|@@CRD_PATH@@|%{crd_path}|g' %{buildroot}%{_unitdir}/chrome-remote-desk # Add directories for policy management mkdir -p %{buildroot}%{_sysconfdir}/chromium/policies/managed mkdir -p %{buildroot}%{_sysconfdir}/chromium/policies/recommended -cp -a ../%{name}-policies/common/html/en-US/*.html . -# linux json files no longer in .zip file -#cp -a ../%{name}-policies/linux/examples/*.json . +cp -a out/Release/gen/chrome/app/policy/common/html/en-US/*.html . cp -a out/Release/gen/chrome/app/policy/linux/examples/chrome.json . mkdir -p %{buildroot}%{_datadir}/icons/hicolor/256x256/apps diff --git a/sources b/sources index 64106c5..9d1d29d 100644 --- a/sources +++ b/sources @@ -1,3 +1,2 @@ SHA512 (depot_tools.git-master.tar.gz) = d3d6a1873b2b0296a8cd99e0d8d2e629a17b1808934b4972556168f8b4ccea60577ebaeab4445baf15afb1b04080808db59a832a5b61d247bd48da14fa6acf03 -SHA512 (policy_templates.zip) = a7e07808a5a053e9e32fe879630ac227369f46e730b6155a570ae096e65e802297a6e635d325886720e55d06ea68ab598bc6b361ede84e61e5e0e577fd4c38fb SHA512 (chromium-62.0.3202.62-clean.tar.xz) = 5151cdd4cc9f5735984ea16615311dbec759d62496b619fa5a04e06e08821ccba7f11e2d1835e2020edcb783150cc7f1880e62084ae9f69057fabea0459e147b From d8f6aaaf5dc74a2e3cd63a06629fb5232f73d861 Mon Sep 17 00:00:00 2001 From: Tomas Popela Date: Wed, 25 Oct 2017 10:30:34 +0200 Subject: [PATCH 05/10] Fix the policy templates handling Basically revert my previous commits as the policy templates are generated during the build. The only thing that we were copying out from the tarballs was the policy templates documentation, but that one is generated as well so use that one and remove the policy_templates zip file from sources --- chromium-latest.py | 30 ------------------------------ chromium.spec | 6 +----- sources | 1 - 3 files changed, 1 insertion(+), 36 deletions(-) diff --git a/chromium-latest.py b/chromium-latest.py index 2efe44b..c77899d 100755 --- a/chromium-latest.py +++ b/chromium-latest.py @@ -209,33 +209,6 @@ def download_chrome_latest_rpm(arch): remove_file_if_exists (chrome_rpm) sys.exit(1) -def remove_and_download_latest_policy_templates(version_string): - - policy_file = 'policy_templates.zip' - if version_string != 'stable': - if version_string == 'unstable': - policy_file = "dev_" + policy_file - else: - policy_file = version_string + "_" + policy_file - - path = 'https://dl.google.com/chrome/policy/%s' % policy_file - remove_file_if_exists(policy_file) - - # Let's make sure we haven't already downloaded it. - if os.path.isfile("./%s" % policy_file): - print "%s already exists!" % policy_file - else: - print "Downloading %s" % path - # Perhaps look at using python-progressbar at some point? - info=urllib.urlretrieve(path, policy_file, reporthook=dlProgress)[1] - urllib.urlcleanup() - print "" - if (info["Content-Type"] != "application/octet-stream"): - print 'Policy templates are not on servers.' % version_string - remove_file_if_exists (policy_file) - sys.exit(1) - - # This is where the magic happens if __name__ == '__main__': @@ -321,9 +294,6 @@ if __name__ == '__main__': download_version(chromium_version) - # Always download the newest policy templates - remove_and_download_latest_policy_templates(version_string) - # Lets make sure we haven't unpacked it already latest_dir = "%s/chromium-%s" % (chromium_root_dir, chromium_version) if (args.clean and os.path.isdir(latest_dir)): diff --git a/chromium.spec b/chromium.spec index b5aec69..ac7a224 100644 --- a/chromium.spec +++ b/chromium.spec @@ -249,7 +249,6 @@ Source7: get_free_ffmpeg_source_files.py Source8: get_linux_tests_names.py # GNOME stuff Source9: chromium-browser.xml -Source10: https://dl.google.com/dl/edgedl/chrome/policy/policy_templates.zip Source11: chrome-remote-desktop@.service Source13: master_preferences @@ -619,7 +618,6 @@ without support for alsa, cups, dbus, gconf, gio, kerberos, pulseaudio, or udev. %prep -%setup -q -T -c -n %{name}-policies -a 10 %setup -q -T -c -n depot_tools -a 2 %if 0%{tests} %setup -q -n chromium-%{version} -b 1 @@ -1323,10 +1321,8 @@ sed -i 's|@@CRD_PATH@@|%{crd_path}|g' %{buildroot}%{_unitdir}/chrome-remote-desk # Add directories for policy management mkdir -p %{buildroot}%{_sysconfdir}/chromium/policies/managed mkdir -p %{buildroot}%{_sysconfdir}/chromium/policies/recommended -cp -a ../%{name}-policies/common/html/en-US/*.html . -# linux json files no longer in .zip file -#cp -a ../%{name}-policies/linux/examples/*.json . +cp -a out/Release/gen/chrome/app/policy/common/html/en-US/*.html . cp -a out/Release/gen/chrome/app/policy/linux/examples/chrome.json . mkdir -p %{buildroot}%{_datadir}/icons/hicolor/256x256/apps diff --git a/sources b/sources index 64106c5..9d1d29d 100644 --- a/sources +++ b/sources @@ -1,3 +1,2 @@ SHA512 (depot_tools.git-master.tar.gz) = d3d6a1873b2b0296a8cd99e0d8d2e629a17b1808934b4972556168f8b4ccea60577ebaeab4445baf15afb1b04080808db59a832a5b61d247bd48da14fa6acf03 -SHA512 (policy_templates.zip) = a7e07808a5a053e9e32fe879630ac227369f46e730b6155a570ae096e65e802297a6e635d325886720e55d06ea68ab598bc6b361ede84e61e5e0e577fd4c38fb SHA512 (chromium-62.0.3202.62-clean.tar.xz) = 5151cdd4cc9f5735984ea16615311dbec759d62496b619fa5a04e06e08821ccba7f11e2d1835e2020edcb783150cc7f1880e62084ae9f69057fabea0459e147b From 530c35bcba6b80615c9f2c82fcafb9f0d50ced14 Mon Sep 17 00:00:00 2001 From: Tom Callaway Date: Wed, 25 Oct 2017 08:28:07 -0400 Subject: [PATCH 06/10] instead use std=c++11 on epel7 --- chromium-62.0.3202.62-epel7-noc++14.patch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chromium-62.0.3202.62-epel7-noc++14.patch b/chromium-62.0.3202.62-epel7-noc++14.patch index 57d24b0..6ed714a 100644 --- a/chromium-62.0.3202.62-epel7-noc++14.patch +++ b/chromium-62.0.3202.62-epel7-noc++14.patch @@ -6,7 +6,7 @@ diff -up chromium-62.0.3202.62/tools/gn/bootstrap/bootstrap.py.epel7-noc++14 chr '-fno-exceptions' ]) - cflags_cc.extend(['-std=c++14', '-Wno-c++11-narrowing']) -+ cflags_cc.extend(['-Wno-c++11-narrowing']) ++ cflags_cc.extend(['-std=c++11', '-Wno-c++11-narrowing']) if is_aix: cflags.extend(['-maix64']) ldflags.extend([ '-maix64 -Wl,-bbigtoc' ]) From f6767a1977aff985b5b24eaee915f052108a98f3 Mon Sep 17 00:00:00 2001 From: Tom Callaway Date: Wed, 25 Oct 2017 08:59:45 -0400 Subject: [PATCH 07/10] fix decay_t usage for gcc 4.8/c++11 --- ...-62.0.3202.62-epel7-c++11-decay-type.patch | 160 ++++++++++++++++++ chromium.spec | 2 + 2 files changed, 162 insertions(+) create mode 100644 chromium-62.0.3202.62-epel7-c++11-decay-type.patch diff --git a/chromium-62.0.3202.62-epel7-c++11-decay-type.patch b/chromium-62.0.3202.62-epel7-c++11-decay-type.patch new file mode 100644 index 0000000..af0c5a7 --- /dev/null +++ b/chromium-62.0.3202.62-epel7-c++11-decay-type.patch @@ -0,0 +1,160 @@ +diff -up chromium-62.0.3202.62/base/bind_helpers.h.epel7-c++11 chromium-62.0.3202.62/base/bind_helpers.h +--- chromium-62.0.3202.62/base/bind_helpers.h.epel7-c++11 2017-10-25 08:50:15.692276363 -0400 ++++ chromium-62.0.3202.62/base/bind_helpers.h 2017-10-25 08:50:39.977611740 -0400 +@@ -282,7 +282,7 @@ class PassedWrapper { + }; + + template +-using Unwrapper = BindUnwrapTraits>; ++using Unwrapper = BindUnwrapTraits::type>; + + template + auto Unwrap(T&& o) -> decltype(Unwrapper::Unwrap(std::forward(o))) { +diff -up chromium-62.0.3202.62/base/bind.h.epel7-c++11 chromium-62.0.3202.62/base/bind.h +--- chromium-62.0.3202.62/base/bind.h.epel7-c++11 2017-10-25 08:55:22.603877014 -0400 ++++ chromium-62.0.3202.62/base/bind.h 2017-10-25 08:56:41.636714097 -0400 +@@ -53,7 +53,7 @@ struct AssertConstructible { + // reference with repeating callbacks--is used instead of base::Passed(). + static_assert( + param_is_forwardable || +- !std::is_constructible&&>::value, ++ !std::is_constructible::type&&>::value, + "Bound argument |i| is move-only but will be forwarded by copy. " + "Ensure |Arg| is bound using base::Passed(), not std::move()."); + static_assert( +@@ -64,7 +64,7 @@ struct AssertConstructible { + static constexpr bool arg_is_storable = + std::is_constructible::value; + static_assert(arg_is_storable || +- !std::is_constructible&&>::value, ++ !std::is_constructible::type&&>::value, + "Bound argument |i| is move-only but will be bound by copy. " + "Ensure |Arg| is mutable and bound using std::move()."); + static_assert(arg_is_storable, +@@ -88,7 +88,7 @@ struct AssertBindArgsValidity, + TypeList, + TypeList> +- : AssertConstructible, Unwrapped, Params>... { ++ : AssertConstructible::type, Unwrapped, Params>... { + static constexpr bool ok = true; + }; + +@@ -98,14 +98,14 @@ struct TransformToUnwrappedTypeImpl; + + template + struct TransformToUnwrappedTypeImpl { +- using StoredType = std::decay_t; ++ using StoredType = typename std::decay::type; + using ForwardType = StoredType&&; + using Unwrapped = decltype(Unwrap(std::declval())); + }; + + template + struct TransformToUnwrappedTypeImpl { +- using StoredType = std::decay_t; ++ using StoredType = typename std::decay::type; + using ForwardType = const StoredType&; + using Unwrapped = decltype(Unwrap(std::declval())); + }; +@@ -153,7 +153,7 @@ using MakeUnwrappedTypeList = + template + inline OnceCallback> + BindOnce(Functor&& functor, Args&&... args) { +- static_assert(!internal::IsOnceCallback>() || ++ static_assert(!internal::IsOnceCallback::type>() || + (std::is_rvalue_reference() && + !std::is_const>()), + "BindOnce requires non-const rvalue for OnceCallback binding." +@@ -197,7 +197,7 @@ template > + BindRepeating(Functor&& functor, Args&&... args) { + static_assert( +- !internal::IsOnceCallback>(), ++ !internal::IsOnceCallback::type>(), + "BindRepeating cannot bind OnceCallback. Use BindOnce with std::move()."); + + // This block checks if each |args| matches to the corresponding params of the +diff -up chromium-62.0.3202.62/base/bind_internal.h.epel7-c++11 chromium-62.0.3202.62/base/bind_internal.h +--- chromium-62.0.3202.62/base/bind_internal.h.epel7-c++11 2017-10-25 08:52:20.018873878 -0400 ++++ chromium-62.0.3202.62/base/bind_internal.h 2017-10-25 08:55:07.779282724 -0400 +@@ -256,7 +256,7 @@ struct FunctorTraits +-using MakeFunctorTraits = FunctorTraits>; ++using MakeFunctorTraits = FunctorTraits::type>; + + // InvokeHelper<> + // +@@ -341,7 +341,7 @@ struct Invoker::is_method; + +- using DecayedArgsTuple = std::decay_t; ++ using DecayedArgsTuple = typename std::decay::type; + static constexpr bool is_weak_call = + IsWeakMethod...>(); +@@ -479,33 +479,33 @@ struct MakeBindStateTypeImpl; + + template + struct MakeBindStateTypeImpl { +- static_assert(!HasRefCountedTypeAsRawPtr...>::value, ++ static_assert(!HasRefCountedTypeAsRawPtr::type...>::value, + "A parameter is a refcounted type and needs scoped_refptr."); +- using Type = BindState, std::decay_t...>; ++ using Type = BindState::type, typename std::decay::type...>; + }; + + template + struct MakeBindStateTypeImpl { +- using Type = BindState>; ++ using Type = BindState::type>; + }; + + template + struct MakeBindStateTypeImpl { + static_assert(!std::is_array>::value, + "First bound argument to a method cannot be an array."); +- static_assert(!HasRefCountedTypeAsRawPtr...>::value, ++ static_assert(!HasRefCountedTypeAsRawPtr::type...>::value, + "A parameter is a refcounted type and needs scoped_refptr."); + + private: +- using DecayedReceiver = std::decay_t; ++ using DecayedReceiver = typename std::decay::type; + + public: + using Type = BindState< +- std::decay_t, ++ typename std::decay::type, + std::conditional_t::value, + scoped_refptr>, + DecayedReceiver>, +- std::decay_t...>; ++ typename std::decay::type...>; + }; + + template +diff -up chromium-62.0.3202.62/base/containers/span.h.epel7-c++11 chromium-62.0.3202.62/base/containers/span.h +--- chromium-62.0.3202.62/base/containers/span.h.epel7-c++11 2017-10-25 08:51:25.260372472 -0400 ++++ chromium-62.0.3202.62/base/containers/span.h 2017-10-25 08:52:07.597213826 -0400 +@@ -27,7 +27,7 @@ template + struct IsSpanImpl> : std::true_type {}; + + template +-using IsSpan = IsSpanImpl>; ++using IsSpan = IsSpanImpl::type>; + + template + struct IsStdArrayImpl : std::false_type {}; +@@ -36,7 +36,7 @@ template + struct IsStdArrayImpl> : std::true_type {}; + + template +-using IsStdArray = IsStdArrayImpl>; ++using IsStdArray = IsStdArrayImpl::type>; + + template + using IsLegalSpanConversion = std::is_convertible; diff --git a/chromium.spec b/chromium.spec index ac7a224..4ae1ecb 100644 --- a/chromium.spec +++ b/chromium.spec @@ -218,6 +218,7 @@ Patch63: chromium-gn-bootstrap-r17.patch Patch64: chromium-62.0.3202.62-correct-cplusplus-check.patch # epel7 does not know about c++14 Patch65: chromium-62.0.3202.62-epel7-noc++14.patch +Patch66: chromium-62.0.3202.62-epel7-c++11-decay-type.patch ### Chromium Tests Patches ### Patch100: chromium-46.0.2490.86-use_system_opus.patch @@ -668,6 +669,7 @@ udev. %patch60 -p1 -b .nonullptr %patch61 -p1 -b .another-rvalue-fix %patch65 -p1 -b .epel7-noc++14 +%patch66 -p1 -b .epel7-c++11 %endif %patch50 -p1 -b .pathfix %patch53 -p1 -b .nogccoptmath From 2180bdba879cfe15ed13fe549a5e69d8bcef00e8 Mon Sep 17 00:00:00 2001 From: Tom Callaway Date: Wed, 25 Oct 2017 09:17:17 -0400 Subject: [PATCH 08/10] more C++11 type handling (enable_if) --- ....62-epel7-c++11-decay-enable_if-type.patch | 96 ++++++++++++++++++- chromium.spec | 2 +- 2 files changed, 94 insertions(+), 4 deletions(-) rename chromium-62.0.3202.62-epel7-c++11-decay-type.patch => chromium-62.0.3202.62-epel7-c++11-decay-enable_if-type.patch (61%) diff --git a/chromium-62.0.3202.62-epel7-c++11-decay-type.patch b/chromium-62.0.3202.62-epel7-c++11-decay-enable_if-type.patch similarity index 61% rename from chromium-62.0.3202.62-epel7-c++11-decay-type.patch rename to chromium-62.0.3202.62-epel7-c++11-decay-enable_if-type.patch index af0c5a7..0e651c6 100644 --- a/chromium-62.0.3202.62-epel7-c++11-decay-type.patch +++ b/chromium-62.0.3202.62-epel7-c++11-decay-enable_if-type.patch @@ -1,6 +1,6 @@ diff -up chromium-62.0.3202.62/base/bind_helpers.h.epel7-c++11 chromium-62.0.3202.62/base/bind_helpers.h --- chromium-62.0.3202.62/base/bind_helpers.h.epel7-c++11 2017-10-25 08:50:15.692276363 -0400 -+++ chromium-62.0.3202.62/base/bind_helpers.h 2017-10-25 08:50:39.977611740 -0400 ++++ chromium-62.0.3202.62/base/bind_helpers.h 2017-10-25 09:12:15.889484145 -0400 @@ -282,7 +282,7 @@ class PassedWrapper { }; @@ -10,6 +10,27 @@ diff -up chromium-62.0.3202.62/base/bind_helpers.h.epel7-c++11 chromium-62.0.320 template auto Unwrap(T&& o) -> decltype(Unwrapper::Unwrap(std::forward(o))) { +@@ -438,7 +438,7 @@ static inline internal::OwnedWrapper + // Both versions of Passed() prevent T from being an lvalue reference. The first + // via use of enable_if, and the second takes a T* which will not bind to T&. + template ::value>* = nullptr> ++ typename std::enable_if::value>::type* = nullptr> + static inline internal::PassedWrapper Passed(T&& scoper) { + return internal::PassedWrapper(std::move(scoper)); + } +@@ -537,9 +537,9 @@ template , +- std::enable_if_t< ++ typename std::enable_if< + internal::IsWeakMethod::is_method, +- BoundArgs...>::value>> { ++ BoundArgs...>::value>::type> { + static constexpr bool is_cancellable = true; + + template diff -up chromium-62.0.3202.62/base/bind.h.epel7-c++11 chromium-62.0.3202.62/base/bind.h --- chromium-62.0.3202.62/base/bind.h.epel7-c++11 2017-10-25 08:55:22.603877014 -0400 +++ chromium-62.0.3202.62/base/bind.h 2017-10-25 08:56:41.636714097 -0400 @@ -77,7 +98,16 @@ diff -up chromium-62.0.3202.62/base/bind.h.epel7-c++11 chromium-62.0.3202.62/bas // This block checks if each |args| matches to the corresponding params of the diff -up chromium-62.0.3202.62/base/bind_internal.h.epel7-c++11 chromium-62.0.3202.62/base/bind_internal.h --- chromium-62.0.3202.62/base/bind_internal.h.epel7-c++11 2017-10-25 08:52:20.018873878 -0400 -+++ chromium-62.0.3202.62/base/bind_internal.h 2017-10-25 08:55:07.779282724 -0400 ++++ chromium-62.0.3202.62/base/bind_internal.h 2017-10-25 09:14:48.526096108 -0400 +@@ -125,7 +125,7 @@ struct FunctorTraits; + // to the function type while capturing lambdas can't. + template + struct FunctorTraits::value>> { ++ typename std::enable_if::value>::type> { + using RunType = ExtractCallableRunType; + static constexpr bool is_method = false; + static constexpr bool is_nullable = false; @@ -256,7 +256,7 @@ struct FunctorTraits...>(); +@@ -383,13 +383,13 @@ struct BindTypeHelper { + }; + + template +-std::enable_if_t::is_nullable, bool> IsNull( ++typename std::enable_if::is_nullable, bool>::type IsNull( + const Functor& functor) { + return !functor; + } + + template +-std::enable_if_t::is_nullable, bool> IsNull( ++typename std::enable_if::is_nullable, bool>::type IsNull( + const Functor&) { + return false; + } @@ -479,33 +479,33 @@ struct MakeBindStateTypeImpl; template @@ -139,7 +185,7 @@ diff -up chromium-62.0.3202.62/base/bind_internal.h.epel7-c++11 chromium-62.0.32 template diff -up chromium-62.0.3202.62/base/containers/span.h.epel7-c++11 chromium-62.0.3202.62/base/containers/span.h --- chromium-62.0.3202.62/base/containers/span.h.epel7-c++11 2017-10-25 08:51:25.260372472 -0400 -+++ chromium-62.0.3202.62/base/containers/span.h 2017-10-25 08:52:07.597213826 -0400 ++++ chromium-62.0.3202.62/base/containers/span.h 2017-10-25 09:13:53.035964265 -0400 @@ -27,7 +27,7 @@ template struct IsSpanImpl> : std::true_type {}; @@ -158,3 +204,47 @@ diff -up chromium-62.0.3202.62/base/containers/span.h.epel7-c++11 chromium-62.0. template using IsLegalSpanConversion = std::is_convertible; +@@ -51,7 +51,7 @@ using ContainerHasIntegralSize = + + template + using EnableIfLegalSpanConversion = +- std::enable_if_t::value>; ++ typename std::enable_if::value>::type; + + // SFINAE check if Container can be converted to a span. Note that the + // implementation details of this check differ slightly from the requirements in +@@ -67,18 +67,18 @@ using EnableIfLegalSpanConversion = + // container. + template + using EnableIfSpanCompatibleContainer = +- std::enable_if_t::value && ++ typename std::enable_if::value && + !internal::IsStdArray::value && + ContainerHasConvertibleData::value && +- ContainerHasIntegralSize::value>; ++ ContainerHasIntegralSize::value>::type; + + template + using EnableIfConstSpanCompatibleContainer = +- std::enable_if_t::value && ++ typename std::enable_if::value && + !internal::IsSpan::value && + !internal::IsStdArray::value && + ContainerHasConvertibleData::value && +- ContainerHasIntegralSize::value>; ++ ContainerHasIntegralSize::value>::type; + + } // namespace internal + +diff -up chromium-62.0.3202.62/ipc/ipc_message_templates.h.epel7-c++11 chromium-62.0.3202.62/ipc/ipc_message_templates.h +--- chromium-62.0.3202.62/ipc/ipc_message_templates.h.epel7-c++11 2017-10-25 09:15:02.382879317 -0400 ++++ chromium-62.0.3202.62/ipc/ipc_message_templates.h 2017-10-25 09:15:36.609343836 -0400 +@@ -67,7 +67,7 @@ void DispatchToMethodImpl(ObjT* obj, + // The following function is for async IPCs which have a dispatcher with an + // extra parameter specified using IPC_BEGIN_MESSAGE_MAP_WITH_PARAM. + template +-std::enable_if_t>::value> ++typename std::enable_if>::value>::type + DispatchToMethod(ObjT* obj, + void (ObjT::*method)(P*, Args...), + P* parameter, diff --git a/chromium.spec b/chromium.spec index 4ae1ecb..14d6ef4 100644 --- a/chromium.spec +++ b/chromium.spec @@ -218,7 +218,7 @@ Patch63: chromium-gn-bootstrap-r17.patch Patch64: chromium-62.0.3202.62-correct-cplusplus-check.patch # epel7 does not know about c++14 Patch65: chromium-62.0.3202.62-epel7-noc++14.patch -Patch66: chromium-62.0.3202.62-epel7-c++11-decay-type.patch +Patch66: chromium-62.0.3202.62-epel7-c++11-decay-enable_if-type.patch ### Chromium Tests Patches ### Patch100: chromium-46.0.2490.86-use_system_opus.patch From 2f12a9278f7bed47e7086ca076252ed5b973bb89 Mon Sep 17 00:00:00 2001 From: Tom Callaway Date: Wed, 25 Oct 2017 10:23:22 -0400 Subject: [PATCH 09/10] even moar c++11 --- ....62-epel7-c++11-decay-enable_if-type.patch | 250 --- ...ium-62.0.3202.62-epel7-c++11-support.patch | 1980 +++++++++++++++++ chromium.spec | 6 +- 3 files changed, 1985 insertions(+), 251 deletions(-) delete mode 100644 chromium-62.0.3202.62-epel7-c++11-decay-enable_if-type.patch create mode 100644 chromium-62.0.3202.62-epel7-c++11-support.patch diff --git a/chromium-62.0.3202.62-epel7-c++11-decay-enable_if-type.patch b/chromium-62.0.3202.62-epel7-c++11-decay-enable_if-type.patch deleted file mode 100644 index 0e651c6..0000000 --- a/chromium-62.0.3202.62-epel7-c++11-decay-enable_if-type.patch +++ /dev/null @@ -1,250 +0,0 @@ -diff -up chromium-62.0.3202.62/base/bind_helpers.h.epel7-c++11 chromium-62.0.3202.62/base/bind_helpers.h ---- chromium-62.0.3202.62/base/bind_helpers.h.epel7-c++11 2017-10-25 08:50:15.692276363 -0400 -+++ chromium-62.0.3202.62/base/bind_helpers.h 2017-10-25 09:12:15.889484145 -0400 -@@ -282,7 +282,7 @@ class PassedWrapper { - }; - - template --using Unwrapper = BindUnwrapTraits>; -+using Unwrapper = BindUnwrapTraits::type>; - - template - auto Unwrap(T&& o) -> decltype(Unwrapper::Unwrap(std::forward(o))) { -@@ -438,7 +438,7 @@ static inline internal::OwnedWrapper - // Both versions of Passed() prevent T from being an lvalue reference. The first - // via use of enable_if, and the second takes a T* which will not bind to T&. - template ::value>* = nullptr> -+ typename std::enable_if::value>::type* = nullptr> - static inline internal::PassedWrapper Passed(T&& scoper) { - return internal::PassedWrapper(std::move(scoper)); - } -@@ -537,9 +537,9 @@ template , -- std::enable_if_t< -+ typename std::enable_if< - internal::IsWeakMethod::is_method, -- BoundArgs...>::value>> { -+ BoundArgs...>::value>::type> { - static constexpr bool is_cancellable = true; - - template -diff -up chromium-62.0.3202.62/base/bind.h.epel7-c++11 chromium-62.0.3202.62/base/bind.h ---- chromium-62.0.3202.62/base/bind.h.epel7-c++11 2017-10-25 08:55:22.603877014 -0400 -+++ chromium-62.0.3202.62/base/bind.h 2017-10-25 08:56:41.636714097 -0400 -@@ -53,7 +53,7 @@ struct AssertConstructible { - // reference with repeating callbacks--is used instead of base::Passed(). - static_assert( - param_is_forwardable || -- !std::is_constructible&&>::value, -+ !std::is_constructible::type&&>::value, - "Bound argument |i| is move-only but will be forwarded by copy. " - "Ensure |Arg| is bound using base::Passed(), not std::move()."); - static_assert( -@@ -64,7 +64,7 @@ struct AssertConstructible { - static constexpr bool arg_is_storable = - std::is_constructible::value; - static_assert(arg_is_storable || -- !std::is_constructible&&>::value, -+ !std::is_constructible::type&&>::value, - "Bound argument |i| is move-only but will be bound by copy. " - "Ensure |Arg| is mutable and bound using std::move()."); - static_assert(arg_is_storable, -@@ -88,7 +88,7 @@ struct AssertBindArgsValidity, - TypeList, - TypeList> -- : AssertConstructible, Unwrapped, Params>... { -+ : AssertConstructible::type, Unwrapped, Params>... { - static constexpr bool ok = true; - }; - -@@ -98,14 +98,14 @@ struct TransformToUnwrappedTypeImpl; - - template - struct TransformToUnwrappedTypeImpl { -- using StoredType = std::decay_t; -+ using StoredType = typename std::decay::type; - using ForwardType = StoredType&&; - using Unwrapped = decltype(Unwrap(std::declval())); - }; - - template - struct TransformToUnwrappedTypeImpl { -- using StoredType = std::decay_t; -+ using StoredType = typename std::decay::type; - using ForwardType = const StoredType&; - using Unwrapped = decltype(Unwrap(std::declval())); - }; -@@ -153,7 +153,7 @@ using MakeUnwrappedTypeList = - template - inline OnceCallback> - BindOnce(Functor&& functor, Args&&... args) { -- static_assert(!internal::IsOnceCallback>() || -+ static_assert(!internal::IsOnceCallback::type>() || - (std::is_rvalue_reference() && - !std::is_const>()), - "BindOnce requires non-const rvalue for OnceCallback binding." -@@ -197,7 +197,7 @@ template > - BindRepeating(Functor&& functor, Args&&... args) { - static_assert( -- !internal::IsOnceCallback>(), -+ !internal::IsOnceCallback::type>(), - "BindRepeating cannot bind OnceCallback. Use BindOnce with std::move()."); - - // This block checks if each |args| matches to the corresponding params of the -diff -up chromium-62.0.3202.62/base/bind_internal.h.epel7-c++11 chromium-62.0.3202.62/base/bind_internal.h ---- chromium-62.0.3202.62/base/bind_internal.h.epel7-c++11 2017-10-25 08:52:20.018873878 -0400 -+++ chromium-62.0.3202.62/base/bind_internal.h 2017-10-25 09:14:48.526096108 -0400 -@@ -125,7 +125,7 @@ struct FunctorTraits; - // to the function type while capturing lambdas can't. - template - struct FunctorTraits::value>> { -+ typename std::enable_if::value>::type> { - using RunType = ExtractCallableRunType; - static constexpr bool is_method = false; - static constexpr bool is_nullable = false; -@@ -256,7 +256,7 @@ struct FunctorTraits --using MakeFunctorTraits = FunctorTraits>; -+using MakeFunctorTraits = FunctorTraits::type>; - - // InvokeHelper<> - // -@@ -341,7 +341,7 @@ struct Invoker::is_method; - -- using DecayedArgsTuple = std::decay_t; -+ using DecayedArgsTuple = typename std::decay::type; - static constexpr bool is_weak_call = - IsWeakMethod...>(); -@@ -383,13 +383,13 @@ struct BindTypeHelper { - }; - - template --std::enable_if_t::is_nullable, bool> IsNull( -+typename std::enable_if::is_nullable, bool>::type IsNull( - const Functor& functor) { - return !functor; - } - - template --std::enable_if_t::is_nullable, bool> IsNull( -+typename std::enable_if::is_nullable, bool>::type IsNull( - const Functor&) { - return false; - } -@@ -479,33 +479,33 @@ struct MakeBindStateTypeImpl; - - template - struct MakeBindStateTypeImpl { -- static_assert(!HasRefCountedTypeAsRawPtr...>::value, -+ static_assert(!HasRefCountedTypeAsRawPtr::type...>::value, - "A parameter is a refcounted type and needs scoped_refptr."); -- using Type = BindState, std::decay_t...>; -+ using Type = BindState::type, typename std::decay::type...>; - }; - - template - struct MakeBindStateTypeImpl { -- using Type = BindState>; -+ using Type = BindState::type>; - }; - - template - struct MakeBindStateTypeImpl { - static_assert(!std::is_array>::value, - "First bound argument to a method cannot be an array."); -- static_assert(!HasRefCountedTypeAsRawPtr...>::value, -+ static_assert(!HasRefCountedTypeAsRawPtr::type...>::value, - "A parameter is a refcounted type and needs scoped_refptr."); - - private: -- using DecayedReceiver = std::decay_t; -+ using DecayedReceiver = typename std::decay::type; - - public: - using Type = BindState< -- std::decay_t, -+ typename std::decay::type, - std::conditional_t::value, - scoped_refptr>, - DecayedReceiver>, -- std::decay_t...>; -+ typename std::decay::type...>; - }; - - template -diff -up chromium-62.0.3202.62/base/containers/span.h.epel7-c++11 chromium-62.0.3202.62/base/containers/span.h ---- chromium-62.0.3202.62/base/containers/span.h.epel7-c++11 2017-10-25 08:51:25.260372472 -0400 -+++ chromium-62.0.3202.62/base/containers/span.h 2017-10-25 09:13:53.035964265 -0400 -@@ -27,7 +27,7 @@ template - struct IsSpanImpl> : std::true_type {}; - - template --using IsSpan = IsSpanImpl>; -+using IsSpan = IsSpanImpl::type>; - - template - struct IsStdArrayImpl : std::false_type {}; -@@ -36,7 +36,7 @@ template - struct IsStdArrayImpl> : std::true_type {}; - - template --using IsStdArray = IsStdArrayImpl>; -+using IsStdArray = IsStdArrayImpl::type>; - - template - using IsLegalSpanConversion = std::is_convertible; -@@ -51,7 +51,7 @@ using ContainerHasIntegralSize = - - template - using EnableIfLegalSpanConversion = -- std::enable_if_t::value>; -+ typename std::enable_if::value>::type; - - // SFINAE check if Container can be converted to a span. Note that the - // implementation details of this check differ slightly from the requirements in -@@ -67,18 +67,18 @@ using EnableIfLegalSpanConversion = - // container. - template - using EnableIfSpanCompatibleContainer = -- std::enable_if_t::value && -+ typename std::enable_if::value && - !internal::IsStdArray::value && - ContainerHasConvertibleData::value && -- ContainerHasIntegralSize::value>; -+ ContainerHasIntegralSize::value>::type; - - template - using EnableIfConstSpanCompatibleContainer = -- std::enable_if_t::value && -+ typename std::enable_if::value && - !internal::IsSpan::value && - !internal::IsStdArray::value && - ContainerHasConvertibleData::value && -- ContainerHasIntegralSize::value>; -+ ContainerHasIntegralSize::value>::type; - - } // namespace internal - -diff -up chromium-62.0.3202.62/ipc/ipc_message_templates.h.epel7-c++11 chromium-62.0.3202.62/ipc/ipc_message_templates.h ---- chromium-62.0.3202.62/ipc/ipc_message_templates.h.epel7-c++11 2017-10-25 09:15:02.382879317 -0400 -+++ chromium-62.0.3202.62/ipc/ipc_message_templates.h 2017-10-25 09:15:36.609343836 -0400 -@@ -67,7 +67,7 @@ void DispatchToMethodImpl(ObjT* obj, - // The following function is for async IPCs which have a dispatcher with an - // extra parameter specified using IPC_BEGIN_MESSAGE_MAP_WITH_PARAM. - template --std::enable_if_t>::value> -+typename std::enable_if>::value>::type - DispatchToMethod(ObjT* obj, - void (ObjT::*method)(P*, Args...), - P* parameter, diff --git a/chromium-62.0.3202.62-epel7-c++11-support.patch b/chromium-62.0.3202.62-epel7-c++11-support.patch new file mode 100644 index 0000000..eb4339a --- /dev/null +++ b/chromium-62.0.3202.62-epel7-c++11-support.patch @@ -0,0 +1,1980 @@ +diff -up chromium-62.0.3202.62/base/bind_helpers.h.epel7-c++11 chromium-62.0.3202.62/base/bind_helpers.h +--- chromium-62.0.3202.62/base/bind_helpers.h.epel7-c++11 2017-10-25 08:50:15.692276363 -0400 ++++ chromium-62.0.3202.62/base/bind_helpers.h 2017-10-25 09:12:15.889484145 -0400 +@@ -282,7 +282,7 @@ class PassedWrapper { + }; + + template +-using Unwrapper = BindUnwrapTraits>; ++using Unwrapper = BindUnwrapTraits::type>; + + template + auto Unwrap(T&& o) -> decltype(Unwrapper::Unwrap(std::forward(o))) { +@@ -438,7 +438,7 @@ static inline internal::OwnedWrapper + // Both versions of Passed() prevent T from being an lvalue reference. The first + // via use of enable_if, and the second takes a T* which will not bind to T&. + template ::value>* = nullptr> ++ typename std::enable_if::value>::type* = nullptr> + static inline internal::PassedWrapper Passed(T&& scoper) { + return internal::PassedWrapper(std::move(scoper)); + } +@@ -537,9 +537,9 @@ template , +- std::enable_if_t< ++ typename std::enable_if< + internal::IsWeakMethod::is_method, +- BoundArgs...>::value>> { ++ BoundArgs...>::value>::type> { + static constexpr bool is_cancellable = true; + + template +diff -up chromium-62.0.3202.62/base/bind.h.epel7-c++11 chromium-62.0.3202.62/base/bind.h +--- chromium-62.0.3202.62/base/bind.h.epel7-c++11 2017-10-25 08:55:22.603877014 -0400 ++++ chromium-62.0.3202.62/base/bind.h 2017-10-25 10:12:28.753008563 -0400 +@@ -7,6 +7,8 @@ + + #include + ++#include "third_party/tao/seq/integer_sequence.hpp" ++#include "third_party/tao/seq/make_integer_sequence.hpp" + #include "base/bind_internal.h" + + // ----------------------------------------------------------------------------- +@@ -53,7 +55,7 @@ struct AssertConstructible { + // reference with repeating callbacks--is used instead of base::Passed(). + static_assert( + param_is_forwardable || +- !std::is_constructible&&>::value, ++ !std::is_constructible::type&&>::value, + "Bound argument |i| is move-only but will be forwarded by copy. " + "Ensure |Arg| is bound using base::Passed(), not std::move()."); + static_assert( +@@ -64,7 +66,7 @@ struct AssertConstructible { + static constexpr bool arg_is_storable = + std::is_constructible::value; + static_assert(arg_is_storable || +- !std::is_constructible&&>::value, ++ !std::is_constructible::type&&>::value, + "Bound argument |i| is move-only but will be bound by copy. " + "Ensure |Arg| is mutable and bound using std::move()."); + static_assert(arg_is_storable, +@@ -84,11 +86,11 @@ template +-struct AssertBindArgsValidity, ++struct AssertBindArgsValidity, + TypeList, + TypeList, + TypeList> +- : AssertConstructible, Unwrapped, Params>... { ++ : AssertConstructible::type, Unwrapped, Params>... { + static constexpr bool ok = true; + }; + +@@ -98,14 +100,14 @@ struct TransformToUnwrappedTypeImpl; + + template + struct TransformToUnwrappedTypeImpl { +- using StoredType = std::decay_t; ++ using StoredType = typename std::decay::type; + using ForwardType = StoredType&&; + using Unwrapped = decltype(Unwrap(std::declval())); + }; + + template + struct TransformToUnwrappedTypeImpl { +- using StoredType = std::decay_t; ++ using StoredType = typename std::decay::type; + using ForwardType = const StoredType&; + using Unwrapped = decltype(Unwrap(std::declval())); + }; +@@ -153,7 +155,7 @@ using MakeUnwrappedTypeList = + template + inline OnceCallback> + BindOnce(Functor&& functor, Args&&... args) { +- static_assert(!internal::IsOnceCallback>() || ++ static_assert(!internal::IsOnceCallback::type>() || + (std::is_rvalue_reference() && + !std::is_const>()), + "BindOnce requires non-const rvalue for OnceCallback binding." +@@ -170,7 +172,7 @@ BindOnce(Functor&& functor, Args&&... ar + Args&&...>; + using BoundParamsList = typename Helper::BoundParamsList; + static_assert(internal::AssertBindArgsValidity< +- std::make_index_sequence, BoundArgsList, ++ tao::seq::make_index_sequence, BoundArgsList, + UnwrappedArgsList, BoundParamsList>::ok, + "The bound args need to be convertible to the target params."); + +@@ -197,7 +199,7 @@ template > + BindRepeating(Functor&& functor, Args&&... args) { + static_assert( +- !internal::IsOnceCallback>(), ++ !internal::IsOnceCallback::type>(), + "BindRepeating cannot bind OnceCallback. Use BindOnce with std::move()."); + + // This block checks if each |args| matches to the corresponding params of the +@@ -211,7 +213,7 @@ BindRepeating(Functor&& functor, Args&&. + Args&&...>; + using BoundParamsList = typename Helper::BoundParamsList; + static_assert(internal::AssertBindArgsValidity< +- std::make_index_sequence, BoundArgsList, ++ tao::seq::make_index_sequence, BoundArgsList, + UnwrappedArgsList, BoundParamsList>::ok, + "The bound args need to be convertible to the target params."); + +diff -up chromium-62.0.3202.62/base/bind_internal.h.epel7-c++11 chromium-62.0.3202.62/base/bind_internal.h +--- chromium-62.0.3202.62/base/bind_internal.h.epel7-c++11 2017-10-25 08:52:20.018873878 -0400 ++++ chromium-62.0.3202.62/base/bind_internal.h 2017-10-25 10:14:03.619256659 -0400 +@@ -15,6 +15,8 @@ + #include "base/memory/raw_scoped_refptr_mismatch_checker.h" + #include "base/memory/weak_ptr.h" + #include "base/template_util.h" ++#include "third_party/tao/seq/integer_sequence.hpp" ++#include "third_party/tao/seq/make_integer_sequence.hpp" + #include "build/build_config.h" + + namespace base { +@@ -98,9 +100,9 @@ struct HasRefCountedTypeAsRawPtr : std:: + // parameters recursively. + template + struct HasRefCountedTypeAsRawPtr +- : std::conditional_t::value, ++ : typedef std::conditional::value, + std::true_type, +- HasRefCountedTypeAsRawPtr> {}; ++ HasRefCountedTypeAsRawPtr::type> {}; + + // ForceVoidReturn<> + // +@@ -125,7 +127,7 @@ struct FunctorTraits; + // to the function type while capturing lambdas can't. + template + struct FunctorTraits::value>> { ++ typename std::enable_if::value>::type> { + using RunType = ExtractCallableRunType; + static constexpr bool is_method = false; + static constexpr bool is_nullable = false; +@@ -256,7 +258,7 @@ struct FunctorTraits +-using MakeFunctorTraits = FunctorTraits>; ++using MakeFunctorTraits = FunctorTraits::type>; + + // InvokeHelper<> + // +@@ -317,7 +319,7 @@ struct Invokerbound_args_)>::value; + return RunImpl(std::move(storage->functor_), + std::move(storage->bound_args_), +- std::make_index_sequence(), ++ tao::seq::make_index_sequence(), + std::forward(unbound_args)...); + } + +@@ -329,7 +331,7 @@ struct Invokerbound_args_)>::value; + return RunImpl(storage->functor_, storage->bound_args_, +- std::make_index_sequence(), ++ tao::seq::make_index_sequence(), + std::forward(unbound_args)...); + } + +@@ -337,11 +339,11 @@ struct Invoker + static inline R RunImpl(Functor&& functor, + BoundArgsTuple&& bound, +- std::index_sequence, ++ tao::seq::index_sequence, + UnboundArgs&&... unbound_args) { + static constexpr bool is_method = MakeFunctorTraits::is_method; + +- using DecayedArgsTuple = std::decay_t; ++ using DecayedArgsTuple = typename std::decay::type; + static constexpr bool is_weak_call = + IsWeakMethod...>(); +@@ -383,13 +385,13 @@ struct BindTypeHelper { + }; + + template +-std::enable_if_t::is_nullable, bool> IsNull( ++typename std::enable_if::is_nullable, bool>::type IsNull( + const Functor& functor) { + return !functor; + } + + template +-std::enable_if_t::is_nullable, bool> IsNull( ++typename std::enable_if::is_nullable, bool>::type IsNull( + const Functor&) { + return false; + } +@@ -398,7 +400,7 @@ std::enable_if_t + template + bool ApplyCancellationTraitsImpl(const Functor& functor, + const BoundArgsTuple& bound_args, +- std::index_sequence) { ++ tao::seq::index_sequence) { + return CallbackCancellationTraits::IsCancelled( + functor, std::get(bound_args)...); + } +@@ -412,7 +414,7 @@ bool ApplyCancellationTraits(const BindS + std::tuple_sizebound_args_)>::value; + return ApplyCancellationTraitsImpl( + storage->functor_, storage->bound_args_, +- std::make_index_sequence()); ++ tao::seq::make_index_sequence()); + }; + + // BindState<> +@@ -479,33 +481,33 @@ struct MakeBindStateTypeImpl; + + template + struct MakeBindStateTypeImpl { +- static_assert(!HasRefCountedTypeAsRawPtr...>::value, ++ static_assert(!HasRefCountedTypeAsRawPtr::type...>::value, + "A parameter is a refcounted type and needs scoped_refptr."); +- using Type = BindState, std::decay_t...>; ++ using Type = BindState::type, typename std::decay::type...>; + }; + + template + struct MakeBindStateTypeImpl { +- using Type = BindState>; ++ using Type = BindState::type>; + }; + + template + struct MakeBindStateTypeImpl { + static_assert(!std::is_array>::value, + "First bound argument to a method cannot be an array."); +- static_assert(!HasRefCountedTypeAsRawPtr...>::value, ++ static_assert(!HasRefCountedTypeAsRawPtr::type...>::value, + "A parameter is a refcounted type and needs scoped_refptr."); + + private: +- using DecayedReceiver = std::decay_t; ++ using DecayedReceiver = typename std::decay::type; + + public: + using Type = BindState< +- std::decay_t, +- std::conditional_t::value, ++ typename std::decay::type, ++ typename std::conditional::value, + scoped_refptr>, +- DecayedReceiver>, +- std::decay_t...>; ++ DecayedReceiver>::type, ++ typename std::decay::type...>; + }; + + template +diff -up chromium-62.0.3202.62/base/containers/span.h.epel7-c++11 chromium-62.0.3202.62/base/containers/span.h +--- chromium-62.0.3202.62/base/containers/span.h.epel7-c++11 2017-10-25 08:51:25.260372472 -0400 ++++ chromium-62.0.3202.62/base/containers/span.h 2017-10-25 09:13:53.035964265 -0400 +@@ -27,7 +27,7 @@ template + struct IsSpanImpl> : std::true_type {}; + + template +-using IsSpan = IsSpanImpl>; ++using IsSpan = IsSpanImpl::type>; + + template + struct IsStdArrayImpl : std::false_type {}; +@@ -36,7 +36,7 @@ template + struct IsStdArrayImpl> : std::true_type {}; + + template +-using IsStdArray = IsStdArrayImpl>; ++using IsStdArray = IsStdArrayImpl::type>; + + template + using IsLegalSpanConversion = std::is_convertible; +@@ -51,7 +51,7 @@ using ContainerHasIntegralSize = + + template + using EnableIfLegalSpanConversion = +- std::enable_if_t::value>; ++ typename std::enable_if::value>::type; + + // SFINAE check if Container can be converted to a span. Note that the + // implementation details of this check differ slightly from the requirements in +@@ -67,18 +67,18 @@ using EnableIfLegalSpanConversion = + // container. + template + using EnableIfSpanCompatibleContainer = +- std::enable_if_t::value && ++ typename std::enable_if::value && + !internal::IsStdArray::value && + ContainerHasConvertibleData::value && +- ContainerHasIntegralSize::value>; ++ ContainerHasIntegralSize::value>::type; + + template + using EnableIfConstSpanCompatibleContainer = +- std::enable_if_t::value && ++ typename std::enable_if::value && + !internal::IsSpan::value && + !internal::IsStdArray::value && + ContainerHasConvertibleData::value && +- ContainerHasIntegralSize::value>; ++ ContainerHasIntegralSize::value>::type; + + } // namespace internal + +diff -up chromium-62.0.3202.62/base/tuple.h.epel7-c++11 chromium-62.0.3202.62/base/tuple.h +--- chromium-62.0.3202.62/base/tuple.h.epel7-c++11 2017-10-25 10:09:22.986397329 -0400 ++++ chromium-62.0.3202.62/base/tuple.h 2017-10-25 10:11:00.392571745 -0400 +@@ -29,6 +29,7 @@ + #include + #include + ++#include "third_party/tao/seq/integer_sequence.hpp" + #include "build/build_config.h" + + namespace base { +@@ -52,7 +53,7 @@ template ) { ++ tao::seq::index_sequence) { + (obj->*method)(std::get(std::forward(args))...); + } + +@@ -69,7 +70,7 @@ inline void DispatchToMethod(const ObjT& + template + inline void DispatchToFunctionImpl(Function function, + Tuple&& args, +- std::index_sequence) { ++ tao::seq::index_sequence) { + (*function)(std::get(std::forward(args))...); + } + +@@ -91,8 +92,8 @@ inline void DispatchToMethodImpl(const O + Method method, + InTuple&& in, + OutTuple* out, +- std::index_sequence, +- std::index_sequence) { ++ tao::seq::index_sequence, ++ tao::seq::index_sequence) { + (obj->*method)(std::get(std::forward(in))..., + &std::get(*out)...); + } +diff -up chromium-62.0.3202.62/components/login/base_screen_handler_utils.h.epel7-c++11 chromium-62.0.3202.62/components/login/base_screen_handler_utils.h +--- chromium-62.0.3202.62/components/login/base_screen_handler_utils.h.epel7-c++11 2017-10-25 10:14:43.493099988 -0400 ++++ chromium-62.0.3202.62/components/login/base_screen_handler_utils.h 2017-10-25 10:15:17.679108311 -0400 +@@ -17,6 +17,7 @@ + #include "base/values.h" + #include "components/login/login_export.h" + #include "components/signin/core/account_id/account_id.h" ++#include "third_party/tao/seq/integer_sequence.hpp" + + namespace login { + +@@ -86,7 +87,7 @@ typename UnwrapConstRef::Type Parse + template + inline void DispatchToCallback(const base::Callback& callback, + const base::ListValue* args, +- std::index_sequence indexes) { ++ tao::seq::index_sequence indexes) { + DCHECK(args); + DCHECK_EQ(sizeof...(Args), args->GetSize()); + +@@ -96,7 +97,7 @@ inline void DispatchToCallback(const bas + template + void CallbackWrapper(const base::Callback& callback, + const base::ListValue* args) { +- DispatchToCallback(callback, args, std::index_sequence_for()); ++ DispatchToCallback(callback, args, tao::seq::index_sequence_for()); + } + + +diff -up chromium-62.0.3202.62/ipc/ipc_message_templates.h.epel7-c++11 chromium-62.0.3202.62/ipc/ipc_message_templates.h +--- chromium-62.0.3202.62/ipc/ipc_message_templates.h.epel7-c++11 2017-10-25 09:15:02.382879317 -0400 ++++ chromium-62.0.3202.62/ipc/ipc_message_templates.h 2017-10-25 10:16:41.889665510 -0400 +@@ -17,11 +17,13 @@ + #include "build/build_config.h" + #include "ipc/ipc_message.h" + #include "ipc/ipc_message_utils.h" ++#include "third_party/tao/seq/integer_sequence.hpp" ++#include "third_party/tao/seq/make_integer_sequence.hpp" + + namespace IPC { + + template +-auto TupleForwardImpl(Tuple&& tuple, std::index_sequence) -> decltype( ++auto TupleForwardImpl(Tuple&& tuple, tao::seq::index_sequence) -> decltype( + std::forward_as_tuple(std::get(std::forward(tuple))...)) { + return std::forward_as_tuple(std::get(std::forward(tuple))...); + } +@@ -38,10 +40,10 @@ auto TupleForwardImpl(Tuple&& tuple, std + template + auto TupleForward(Tuple&& tuple) -> decltype(TupleForwardImpl( + std::forward(tuple), +- std::make_index_sequence>::value>())) { ++ tao::seq::make_index_sequence>::value>())) { + return TupleForwardImpl( + std::forward(tuple), +- std::make_index_sequence>::value>()); ++ tao::seq::make_index_sequence>::value>()); + } + + // This function is for all the async IPCs that don't pass an extra parameter +@@ -60,21 +62,21 @@ void DispatchToMethodImpl(ObjT* obj, + Method method, + P* parameter, + Tuple&& tuple, +- std::index_sequence) { ++ tao::seq::index_sequence) { + (obj->*method)(parameter, std::get(std::forward(tuple))...); + } + + // The following function is for async IPCs which have a dispatcher with an + // extra parameter specified using IPC_BEGIN_MESSAGE_MAP_WITH_PARAM. + template +-std::enable_if_t>::value> ++typename std::enable_if>::value>::type + DispatchToMethod(ObjT* obj, + void (ObjT::*method)(P*, Args...), + P* parameter, + Tuple&& tuple) { + constexpr size_t size = std::tuple_size>::value; + DispatchToMethodImpl(obj, method, parameter, std::forward(tuple), +- std::make_index_sequence()); ++ tao::seq::make_index_sequence()); + } + + enum class MessageKind { +diff -up chromium-62.0.3202.62/ppapi/proxy/dispatch_reply_message.h.epel7-c++11 chromium-62.0.3202.62/ppapi/proxy/dispatch_reply_message.h +--- chromium-62.0.3202.62/ppapi/proxy/dispatch_reply_message.h.epel7-c++11 2017-10-25 10:16:53.888317449 -0400 ++++ chromium-62.0.3202.62/ppapi/proxy/dispatch_reply_message.h 2017-10-25 10:17:50.152688363 -0400 +@@ -17,6 +17,7 @@ + #include "base/tuple.h" + #include "ipc/ipc_message_macros.h" + #include "ppapi/c/pp_errors.h" ++#include "third_party/tao/seq/integer_sequence.hpp" + + namespace ppapi { + namespace proxy { +@@ -28,7 +29,7 @@ inline void DispatchResourceReplyImpl(Ob + Method method, + const ResourceMessageReplyParams& params, + TupleType&& args_tuple, +- std::index_sequence) { ++ tao::seq::index_sequence) { + (obj->*method)(params, + std::get(std::forward(args_tuple))...); + } +@@ -51,7 +52,7 @@ template ) { ++ tao::seq::index_sequence) { + std::forward(callback).Run( + params, std::get(std::forward(args_tuple))...); + } +diff -up chromium-62.0.3202.62/third_party/tao/seq/at_index.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/at_index.hpp +--- chromium-62.0.3202.62/third_party/tao/seq/at_index.hpp.epel7-c++11 2017-10-25 10:08:42.418574130 -0400 ++++ chromium-62.0.3202.62/third_party/tao/seq/at_index.hpp 2017-10-25 10:05:28.328204354 -0400 +@@ -0,0 +1,60 @@ ++// Copyright (c) 2015-2017 Daniel Frey ++// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ ++ ++#ifndef TAOCPP_SEQUENCES_INCLUDE_AT_INDEX_HPP ++#define TAOCPP_SEQUENCES_INCLUDE_AT_INDEX_HPP ++ ++#include ++ ++#include "make_integer_sequence.hpp" ++ ++namespace tao ++{ ++ namespace seq ++ { ++ // based on http://talesofcpp.fusionfenix.com/post-22/true-story-efficient-packing ++ ++ namespace impl ++ { ++ template< std::size_t, typename T > ++ struct indexed ++ { ++ using type = T; ++ }; ++ ++ template< typename, typename... Ts > ++ struct indexer; ++ ++ template< std::size_t... Is, typename... Ts > ++ struct indexer< index_sequence< Is... >, Ts... > ++ : indexed< Is, Ts >... ++ { ++ }; ++ ++ template< std::size_t I, typename T > ++ indexed< I, T > select( const indexed< I, T >& ); ++ } ++ ++ template< std::size_t I, typename... Ts > ++ using at_index = decltype( impl::select< I >( impl::indexer< index_sequence_for< Ts... >, Ts... >() ) ); ++ ++#ifndef _MSC_VER ++ template< std::size_t I, typename... Ts > ++ using at_index_t = typename at_index< I, Ts... >::type; ++#else ++ namespace impl ++ { ++ template< typename T > ++ struct get_type ++ { ++ using type = typename T::type; ++ }; ++ } ++ ++ template< std::size_t I, typename... Ts > ++ using at_index_t = typename impl::get_type< at_index< I, Ts... > >::type; ++#endif ++ } ++} ++ ++#endif // TAOCPP_SEQUENCES_INCLUDE_AT_INDEX_HPP +diff -up chromium-62.0.3202.62/third_party/tao/seq/concatenate.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/concatenate.hpp +--- chromium-62.0.3202.62/third_party/tao/seq/concatenate.hpp.epel7-c++11 2017-10-25 10:08:42.422574014 -0400 ++++ chromium-62.0.3202.62/third_party/tao/seq/concatenate.hpp 2017-10-25 10:05:28.328204354 -0400 +@@ -0,0 +1,29 @@ ++// Copyright (c) 2015-2017 Daniel Frey ++// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ ++ ++#ifndef TAOCPP_SEQUENCES_INCLUDE_CONCATENATE_HPP ++#define TAOCPP_SEQUENCES_INCLUDE_CONCATENATE_HPP ++ ++#include ++ ++#include "integer_sequence.hpp" ++ ++namespace tao ++{ ++ namespace seq ++ { ++ template< typename, typename > ++ struct concatenate; ++ ++ template< typename TA, TA... As, typename TB, TB... Bs > ++ struct concatenate< integer_sequence< TA, As... >, integer_sequence< TB, Bs... > > ++ { ++ using type = integer_sequence< typename std::common_type< TA, TB >::type, As..., Bs... >; ++ }; ++ ++ template< typename A, typename B > ++ using concatenate_t = typename concatenate< A, B >::type; ++ } ++} ++ ++#endif // TAOCPP_SEQUENCES_INCLUDE_CONCATENATE_HPP +diff -up chromium-62.0.3202.62/third_party/tao/seq/config.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/config.hpp +--- chromium-62.0.3202.62/third_party/tao/seq/config.hpp.epel7-c++11 2017-10-25 10:08:42.428573840 -0400 ++++ chromium-62.0.3202.62/third_party/tao/seq/config.hpp 2017-10-25 10:05:28.328204354 -0400 +@@ -0,0 +1,25 @@ ++// Copyright (c) 2015-2017 Daniel Frey ++// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ ++ ++#ifndef TAOCPP_SEQUENCES_INCLUDE_CONFIG_HPP ++#define TAOCPP_SEQUENCES_INCLUDE_CONFIG_HPP ++ ++#if __cplusplus >= 201402L ++ ++#define TAOCPP_USE_STD_INTEGER_SEQUENCE ++ ++#if defined( _LIBCPP_VERSION ) ++#define TAOCPP_USE_STD_MAKE_INTEGER_SEQUENCE ++#elif defined( _GLIBCXX_RELEASE ) && ( _GLIBCXX_RELEASE >= 8 ) ++#define TAOCPP_USE_STD_MAKE_INTEGER_SEQUENCE ++#elif defined( _MSC_VER ) && ( _MSC_VER >= 190023918 ) ++#define TAOCPP_USE_STD_MAKE_INTEGER_SEQUENCE ++#endif ++ ++#endif // __cplusplus >= 201402L ++ ++#if defined( __cpp_fold_expressions ) ++#define TAOCPP_FOLD_EXPRESSIONS ++#endif ++ ++#endif // TAOCPP_SEQUENCES_INCLUDE_CONFIG_HPP +diff -up chromium-62.0.3202.62/third_party/tao/seq/exclusive_scan.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/exclusive_scan.hpp +--- chromium-62.0.3202.62/third_party/tao/seq/exclusive_scan.hpp.epel7-c++11 2017-10-25 10:08:42.429573811 -0400 ++++ chromium-62.0.3202.62/third_party/tao/seq/exclusive_scan.hpp 2017-10-25 10:05:28.328204354 -0400 +@@ -0,0 +1,45 @@ ++// Copyright (c) 2015-2017 Daniel Frey ++// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ ++ ++#ifndef TAOCPP_SEQUENCES_INCLUDE_EXCLUSIVE_SCAN_HPP ++#define TAOCPP_SEQUENCES_INCLUDE_EXCLUSIVE_SCAN_HPP ++ ++#include ++ ++#include "make_integer_sequence.hpp" ++#include "partial_sum.hpp" ++ ++namespace tao ++{ ++ namespace seq ++ { ++ namespace impl ++ { ++ template< typename S, typename = make_index_sequence< S::size() > > ++ struct exclusive_scan; ++ ++ template< typename S, std::size_t... Is > ++ struct exclusive_scan< S, index_sequence< Is... > > ++ { ++ using type = integer_sequence< typename S::value_type, partial_sum< Is, S >::value... >; ++ }; ++ } ++ ++ template< typename T, T... Ns > ++ struct exclusive_scan ++ : impl::exclusive_scan< integer_sequence< T, Ns... > > ++ { ++ }; ++ ++ template< typename T, T... Ns > ++ struct exclusive_scan< integer_sequence< T, Ns... > > ++ : impl::exclusive_scan< integer_sequence< T, Ns... > > ++ { ++ }; ++ ++ template< typename T, T... Ns > ++ using exclusive_scan_t = typename exclusive_scan< T, Ns... >::type; ++ } ++} ++ ++#endif // TAOCPP_SEQUENCES_INCLUDE_EXCLUSIVE_SCAN_HPP +diff -up chromium-62.0.3202.62/third_party/tao/seq/fold.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/fold.hpp +--- chromium-62.0.3202.62/third_party/tao/seq/fold.hpp.epel7-c++11 2017-10-25 10:08:42.430573782 -0400 ++++ chromium-62.0.3202.62/third_party/tao/seq/fold.hpp 2017-10-25 10:05:28.328204354 -0400 +@@ -0,0 +1,58 @@ ++// Copyright (c) 2015-2017 Daniel Frey ++// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ ++ ++#ifndef TAOCPP_SEQUENCES_INCLUDE_FOLD_HPP ++#define TAOCPP_SEQUENCES_INCLUDE_FOLD_HPP ++ ++#include ++ ++#include "integer_sequence.hpp" ++#include "make_integer_sequence.hpp" ++#include "select.hpp" ++ ++namespace tao ++{ ++ namespace seq ++ { ++ namespace impl ++ { ++ template< template< typename U, U, U > class, typename, bool, typename T, T... > ++ struct folder; ++ ++ template< template< typename U, U, U > class OP, std::size_t... Is, typename T, T... Ns > ++ struct folder< OP, index_sequence< Is... >, false, T, Ns... > ++ { ++ using type = integer_sequence< T, OP< T, seq::select< 2 * Is, T, Ns... >::value, seq::select< 2 * Is + 1, T, Ns... >::value >::value... >; ++ }; ++ ++ template< template< typename U, U, U > class OP, std::size_t... Is, typename T, T N, T... Ns > ++ struct folder< OP, index_sequence< Is... >, true, T, N, Ns... > ++ { ++ using type = integer_sequence< T, N, OP< T, seq::select< 2 * Is, T, Ns... >::value, seq::select< 2 * Is + 1, T, Ns... >::value >::value... >; ++ }; ++ } ++ ++ template< template< typename U, U, U > class, typename T, T... > ++ struct fold; ++ ++ template< template< typename U, U, U > class OP, typename T, T N > ++ struct fold< OP, T, N > ++ : std::integral_constant< T, N > ++ { ++ }; ++ ++ template< template< typename U, U, U > class OP, typename T, T... Ns > ++ struct fold ++ : fold< OP, typename impl::folder< OP, make_index_sequence< sizeof...( Ns ) / 2 >, sizeof...( Ns ) % 2 == 1, T, Ns... >::type > ++ { ++ }; ++ ++ template< template< typename U, U, U > class OP, typename T, T... Ns > ++ struct fold< OP, integer_sequence< T, Ns... > > ++ : fold< OP, T, Ns... > ++ { ++ }; ++ } ++} ++ ++#endif // TAOCPP_SEQUENCES_INCLUDE_FOLD_HPP +diff -up chromium-62.0.3202.62/third_party/tao/seq/head.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/head.hpp +--- chromium-62.0.3202.62/third_party/tao/seq/head.hpp.epel7-c++11 2017-10-25 10:08:42.431573753 -0400 ++++ chromium-62.0.3202.62/third_party/tao/seq/head.hpp 2017-10-25 10:05:28.328204354 -0400 +@@ -0,0 +1,32 @@ ++// Copyright (c) 2015-2017 Daniel Frey ++// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ ++ ++#ifndef TAOCPP_SEQUENCES_INCLUDE_HEAD_HPP ++#define TAOCPP_SEQUENCES_INCLUDE_HEAD_HPP ++ ++#include ++ ++#include "integer_sequence.hpp" ++ ++namespace tao ++{ ++ namespace seq ++ { ++ template< typename T, T... Ns > ++ struct head; ++ ++ template< typename T, T N, T... Ns > ++ struct head< T, N, Ns... > ++ : std::integral_constant< T, N > ++ { ++ }; ++ ++ template< typename T, T... Ns > ++ struct head< integer_sequence< T, Ns... > > ++ : head< T, Ns... > ++ { ++ }; ++ } ++} ++ ++#endif // TAOCPP_SEQUENCES_INCLUDE_HEAD_HPP +diff -up chromium-62.0.3202.62/third_party/tao/seq/inclusive_scan.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/inclusive_scan.hpp +--- chromium-62.0.3202.62/third_party/tao/seq/inclusive_scan.hpp.epel7-c++11 2017-10-25 10:08:42.432573724 -0400 ++++ chromium-62.0.3202.62/third_party/tao/seq/inclusive_scan.hpp 2017-10-25 10:05:28.328204354 -0400 +@@ -0,0 +1,34 @@ ++// Copyright (c) 2015-2017 Daniel Frey ++// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ ++ ++#ifndef TAOCPP_SEQUENCES_INCLUDE_INCLUSIVE_SCAN_HPP ++#define TAOCPP_SEQUENCES_INCLUDE_INCLUSIVE_SCAN_HPP ++ ++#include ++ ++#include "exclusive_scan.hpp" ++#include "integer_sequence.hpp" ++#include "plus.hpp" ++ ++namespace tao ++{ ++ namespace seq ++ { ++ template< typename T, T... Ns > ++ struct inclusive_scan ++ : plus< exclusive_scan_t< T, Ns... >, integer_sequence< T, Ns... > > ++ { ++ }; ++ ++ template< typename T, T... Ns > ++ struct inclusive_scan< integer_sequence< T, Ns... > > ++ : plus< exclusive_scan_t< integer_sequence< T, Ns... > >, integer_sequence< T, Ns... > > ++ { ++ }; ++ ++ template< typename T, T... Ns > ++ using inclusive_scan_t = typename inclusive_scan< T, Ns... >::type; ++ } ++} ++ ++#endif // TAOCPP_SEQUENCES_INCLUDE_INCLUSIVE_SCAN_HPP +diff -up chromium-62.0.3202.62/third_party/tao/seq/integer_sequence.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/integer_sequence.hpp +--- chromium-62.0.3202.62/third_party/tao/seq/integer_sequence.hpp.epel7-c++11 2017-10-25 10:08:42.433573695 -0400 ++++ chromium-62.0.3202.62/third_party/tao/seq/integer_sequence.hpp 2017-10-25 10:05:28.328204354 -0400 +@@ -0,0 +1,42 @@ ++// Copyright (c) 2015-2017 Daniel Frey ++// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ ++ ++#ifndef TAOCPP_SEQUENCES_INCLUDE_INTEGER_SEQUENCE_HPP ++#define TAOCPP_SEQUENCES_INCLUDE_INTEGER_SEQUENCE_HPP ++ ++#include ++#include ++ ++#include "config.hpp" ++ ++namespace tao ++{ ++ namespace seq ++ { ++ ++#ifdef TAOCPP_USE_STD_INTEGER_SEQUENCE ++ ++ using std::integer_sequence; ++ using std::index_sequence; ++ ++#else ++ ++ template< typename T, T... Ns > ++ struct integer_sequence ++ { ++ using value_type = T; ++ ++ static constexpr std::size_t size() noexcept ++ { ++ return sizeof...( Ns ); ++ } ++ }; ++ ++ template< std::size_t... Ns > ++ using index_sequence = integer_sequence< std::size_t, Ns... >; ++ ++#endif ++ } ++} ++ ++#endif // TAOCPP_SEQUENCES_INCLUDE_INTEGER_SEQUENCE_HPP +diff -up chromium-62.0.3202.62/third_party/tao/seq/is_all.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/is_all.hpp +--- chromium-62.0.3202.62/third_party/tao/seq/is_all.hpp.epel7-c++11 2017-10-25 10:08:42.433573695 -0400 ++++ chromium-62.0.3202.62/third_party/tao/seq/is_all.hpp 2017-10-25 10:05:28.328204354 -0400 +@@ -0,0 +1,34 @@ ++// Copyright (c) 2015-2017 Daniel Frey ++// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ ++ ++#ifndef TAOCPP_SEQUENCES_INCLUDE_IS_ALL_HPP ++#define TAOCPP_SEQUENCES_INCLUDE_IS_ALL_HPP ++ ++#include "config.hpp" ++ ++#ifndef TAOCPP_FOLD_EXPRESSIONS ++#include "integer_sequence.hpp" ++#endif ++ ++#include ++ ++namespace tao ++{ ++ namespace seq ++ { ++ ++#ifdef TAOCPP_FOLD_EXPRESSIONS ++ ++ template< bool... Bs > ++ using is_all = std::integral_constant< bool, ( Bs && ... ) >; ++ ++#else ++ ++ template< bool... Bs > ++ using is_all = std::integral_constant< bool, std::is_same< integer_sequence< bool, true, Bs... >, integer_sequence< bool, Bs..., true > >::value >; ++ ++#endif ++ } ++} ++ ++#endif // TAOCPP_SEQUENCES_INCLUDE_IS_ALL_HPP +diff -up chromium-62.0.3202.62/third_party/tao/seq/is_any.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/is_any.hpp +--- chromium-62.0.3202.62/third_party/tao/seq/is_any.hpp.epel7-c++11 2017-10-25 10:08:42.434573666 -0400 ++++ chromium-62.0.3202.62/third_party/tao/seq/is_any.hpp 2017-10-25 10:05:28.328204354 -0400 +@@ -0,0 +1,34 @@ ++// Copyright (c) 2015-2017 Daniel Frey ++// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ ++ ++#ifndef TAOCPP_SEQUENCES_INCLUDE_IS_ANY_HPP ++#define TAOCPP_SEQUENCES_INCLUDE_IS_ANY_HPP ++ ++#include "config.hpp" ++ ++#ifndef TAOCPP_FOLD_EXPRESSIONS ++#include "is_all.hpp" ++#endif ++ ++#include ++ ++namespace tao ++{ ++ namespace seq ++ { ++ ++#ifdef TAOCPP_FOLD_EXPRESSIONS ++ ++ template< bool... Bs > ++ using is_any = std::integral_constant< bool, ( Bs || ... ) >; ++ ++#else ++ ++ template< bool... Bs > ++ using is_any = std::integral_constant< bool, !is_all< !Bs... >::value >; ++ ++#endif ++ } ++} ++ ++#endif // TAOCPP_SEQUENCES_INCLUDE_IS_ANY_HPP +diff -up chromium-62.0.3202.62/third_party/tao/seq/LICENSE.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/LICENSE +--- chromium-62.0.3202.62/third_party/tao/seq/LICENSE.epel7-c++11 2017-10-25 10:08:42.435573638 -0400 ++++ chromium-62.0.3202.62/third_party/tao/seq/LICENSE 2017-10-25 10:05:28.327204383 -0400 +@@ -0,0 +1,22 @@ ++The MIT License (MIT) ++ ++Copyright (c) 2015-2017 Daniel Frey ++ ++Permission is hereby granted, free of charge, to any person obtaining a copy ++of this software and associated documentation files (the "Software"), to deal ++in the Software without restriction, including without limitation the rights ++to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ++copies of the Software, and to permit persons to whom the Software is ++furnished to do so, subject to the following conditions: ++ ++The above copyright notice and this permission notice shall be included in all ++copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ++AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ++LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, ++OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE ++SOFTWARE. ++ +diff -up chromium-62.0.3202.62/third_party/tao/seq/make_integer_range.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/make_integer_range.hpp +--- chromium-62.0.3202.62/third_party/tao/seq/make_integer_range.hpp.epel7-c++11 2017-10-25 10:08:42.435573638 -0400 ++++ chromium-62.0.3202.62/third_party/tao/seq/make_integer_range.hpp 2017-10-25 10:05:28.328204354 -0400 +@@ -0,0 +1,39 @@ ++// Copyright (c) 2015-2017 Daniel Frey ++// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ ++ ++#ifndef TAOCPP_SEQUENCES_INCLUDE_MAKE_INTEGER_RANGE_HPP ++#define TAOCPP_SEQUENCES_INCLUDE_MAKE_INTEGER_RANGE_HPP ++ ++#include "make_integer_sequence.hpp" ++ ++namespace tao ++{ ++ namespace seq ++ { ++ namespace impl ++ { ++ template< typename T, T Begin, T Steps, bool Increase, T Delta = T( 1 ), typename = make_integer_sequence< T, Steps > > ++ struct generate_range; ++ ++ template< typename T, T B, T S, T D, T... Ns > ++ struct generate_range< T, B, S, true, D, integer_sequence< T, Ns... > > ++ { ++ using type = integer_sequence< T, B + D * Ns... >; ++ }; ++ ++ template< typename T, T B, T S, T D, T... Ns > ++ struct generate_range< T, B, S, false, D, integer_sequence< T, Ns... > > ++ { ++ using type = integer_sequence< T, B - D * Ns... >; ++ }; ++ } ++ ++ template< typename T, T N, T M > ++ using make_integer_range = typename impl::generate_range< T, N, ( N <= M ) ? ( M - N ) : ( N - M ), ( N <= M ) >::type; ++ ++ template< std::size_t N, std::size_t M > ++ using make_index_range = make_integer_range< std::size_t, N, M >; ++ } ++} ++ ++#endif // TAOCPP_SEQUENCES_INCLUDE_MAKE_INTEGER_RANGE_HPP +diff -up chromium-62.0.3202.62/third_party/tao/seq/make_integer_sequence.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/make_integer_sequence.hpp +--- chromium-62.0.3202.62/third_party/tao/seq/make_integer_sequence.hpp.epel7-c++11 2017-10-25 10:08:42.436573608 -0400 ++++ chromium-62.0.3202.62/third_party/tao/seq/make_integer_sequence.hpp 2017-10-25 10:05:28.328204354 -0400 +@@ -0,0 +1,87 @@ ++// Copyright (c) 2015-2017 Daniel Frey ++// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ ++ ++#ifndef TAOCPP_SEQUENCES_INCLUDE_MAKE_INTEGER_SEQUENCE_HPP ++#define TAOCPP_SEQUENCES_INCLUDE_MAKE_INTEGER_SEQUENCE_HPP ++ ++#include ++#include ++#include ++ ++#include "config.hpp" ++#include "integer_sequence.hpp" ++ ++namespace tao ++{ ++ namespace seq ++ { ++ ++#ifdef TAOCPP_USE_STD_MAKE_INTEGER_SEQUENCE ++ ++ using std::make_integer_sequence; ++ using std::make_index_sequence; ++ using std::index_sequence_for; ++ ++#else ++ ++ namespace impl ++ { ++ // we have four instantiations of generate_sequence<>, independent of T or N. ++ // V is the current bit, E is the end marker - if true, this is the last step. ++ template< bool V, bool E > ++ struct generate_sequence; ++ ++ // last step: generate final integer sequence ++ template<> ++ struct generate_sequence< false, true > ++ { ++ template< typename T, T M, T N, std::size_t S, T... Ns > ++ using f = integer_sequence< T, Ns... >; ++ }; ++ ++ template<> ++ struct generate_sequence< true, true > ++ { ++ template< typename T, T M, T N, std::size_t S, T... Ns > ++ using f = integer_sequence< T, Ns..., S >; ++ }; ++ ++ // intermediate step: double existing values, append one more if V is set. ++ template<> ++ struct generate_sequence< false, false > ++ { ++ template< typename T, T M, T N, std::size_t S, T... Ns > ++ using f = typename generate_sequence< ( N & ( M / 2 ) ) != 0, ( M / 2 ) == 0 >::template f< T, M / 2, N, 2 * S, Ns..., ( Ns + S )... >; ++ }; ++ ++ template<> ++ struct generate_sequence< true, false > ++ { ++ template< typename T, T M, T N, std::size_t S, T... Ns > ++ using f = typename generate_sequence< ( N & ( M / 2 ) ) != 0, ( M / 2 ) == 0 >::template f< T, M / 2, N, 2 * S + 1, Ns..., ( Ns + S )..., 2 * S >; ++ }; ++ ++ // the final sequence per T/N should be memoized, it will probably be used multiple times. ++ // also checks the limit and starts the above generator properly. ++ template< typename T, T N > ++ struct memoize_sequence ++ { ++ static_assert( N < T( 1 << 20 ), "N too large" ); ++ using type = typename generate_sequence< false, false >::template f< T, ( N < T( 1 << 1 ) ) ? T( 1 << 1 ) : ( N < T( 1 << 2 ) ) ? T( 1 << 2 ) : ( N < T( 1 << 3 ) ) ? T( 1 << 3 ) : ( N < T( 1 << 4 ) ) ? T( 1 << 4 ) : ( N < T( 1 << 5 ) ) ? T( 1 << 5 ) : ( N < T( 1 << 6 ) ) ? T( 1 << 6 ) : ( N < T( 1 << 7 ) ) ? T( 1 << 7 ) : ( N < T( 1 << 8 ) ) ? T( 1 << 8 ) : ( N < T( 1 << 9 ) ) ? T( 1 << 9 ) : ( N < T( 1 << 10 ) ) ? T( 1 << 10 ) : T( 1 << 20 ), N, 0 >; ++ }; ++ } ++ ++ template< typename T, T N > ++ using make_integer_sequence = typename impl::memoize_sequence< T, N >::type; ++ ++ template< std::size_t N > ++ using make_index_sequence = make_integer_sequence< std::size_t, N >; ++ ++ template< typename... Ts > ++ using index_sequence_for = make_index_sequence< sizeof...( Ts ) >; ++ ++#endif ++ } ++} ++ ++#endif // TAOCPP_SEQUENCES_INCLUDE_MAKE_INTEGER_SEQUENCE_HPP +diff -up chromium-62.0.3202.62/third_party/tao/seq/map.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/map.hpp +--- chromium-62.0.3202.62/third_party/tao/seq/map.hpp.epel7-c++11 2017-10-25 10:08:42.437573579 -0400 ++++ chromium-62.0.3202.62/third_party/tao/seq/map.hpp 2017-10-25 10:05:28.328204354 -0400 +@@ -0,0 +1,31 @@ ++// Copyright (c) 2015-2017 Daniel Frey ++// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ ++ ++#ifndef TAOCPP_SEQUENCES_INCLUDE_MAP_HPP ++#define TAOCPP_SEQUENCES_INCLUDE_MAP_HPP ++ ++#include ++#include ++ ++#include "integer_sequence.hpp" ++#include "select.hpp" ++ ++namespace tao ++{ ++ namespace seq ++ { ++ template< typename, typename > ++ struct map; ++ ++ template< std::size_t... Ns, typename M > ++ struct map< index_sequence< Ns... >, M > ++ { ++ using type = integer_sequence< typename M::value_type, select< Ns, M >::value... >; ++ }; ++ ++ template< typename S, typename M > ++ using map_t = typename map< S, M >::type; ++ } ++} ++ ++#endif // TAOCPP_SEQUENCES_INCLUDE_MAP_HPP +diff -up chromium-62.0.3202.62/third_party/tao/seq/max.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/max.hpp +--- chromium-62.0.3202.62/third_party/tao/seq/max.hpp.epel7-c++11 2017-10-25 10:08:42.437573579 -0400 ++++ chromium-62.0.3202.62/third_party/tao/seq/max.hpp 2017-10-25 10:05:28.328204354 -0400 +@@ -0,0 +1,35 @@ ++// Copyright (c) 2015-2017 Daniel Frey ++// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ ++ ++#ifndef TAOCPP_SEQUENCES_INCLUDE_MAX_HPP ++#define TAOCPP_SEQUENCES_INCLUDE_MAX_HPP ++ ++#include "fold.hpp" ++ ++#include ++ ++namespace tao ++{ ++ namespace seq ++ { ++ namespace impl ++ { ++ template< typename T, T A, T B > ++ using max = std::integral_constant< T, ( ( A > B ) ? A : B ) >; ++ } ++ ++ template< typename T, T... Ns > ++ struct max ++ : fold< impl::max, T, Ns... > ++ { ++ }; ++ ++ template< typename T, T... Ns > ++ struct max< integer_sequence< T, Ns... > > ++ : max< T, Ns... > ++ { ++ }; ++ } ++} ++ ++#endif // TAOCPP_SEQUENCES_INCLUDE_MAX_HPP +diff -up chromium-62.0.3202.62/third_party/tao/seq/min.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/min.hpp +--- chromium-62.0.3202.62/third_party/tao/seq/min.hpp.epel7-c++11 2017-10-25 10:08:42.438573550 -0400 ++++ chromium-62.0.3202.62/third_party/tao/seq/min.hpp 2017-10-25 10:05:28.328204354 -0400 +@@ -0,0 +1,35 @@ ++// Copyright (c) 2015-2017 Daniel Frey ++// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ ++ ++#ifndef TAOCPP_SEQUENCES_INCLUDE_MIN_HPP ++#define TAOCPP_SEQUENCES_INCLUDE_MIN_HPP ++ ++#include "fold.hpp" ++ ++#include ++ ++namespace tao ++{ ++ namespace seq ++ { ++ namespace impl ++ { ++ template< typename T, T A, T B > ++ using min = std::integral_constant< T, ( ( A < B ) ? A : B ) >; ++ } ++ ++ template< typename T, T... Ns > ++ struct min ++ : fold< impl::min, T, Ns... > ++ { ++ }; ++ ++ template< typename T, T... Ns > ++ struct min< integer_sequence< T, Ns... > > ++ : min< T, Ns... > ++ { ++ }; ++ } ++} ++ ++#endif // TAOCPP_SEQUENCES_INCLUDE_MIN_HPP +diff -up chromium-62.0.3202.62/third_party/tao/seq/minus.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/minus.hpp +--- chromium-62.0.3202.62/third_party/tao/seq/minus.hpp.epel7-c++11 2017-10-25 10:08:42.438573550 -0400 ++++ chromium-62.0.3202.62/third_party/tao/seq/minus.hpp 2017-10-25 10:05:28.328204354 -0400 +@@ -0,0 +1,29 @@ ++// Copyright (c) 2015-2017 Daniel Frey ++// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ ++ ++#ifndef TAOCPP_SEQUENCES_INCLUDE_MINUS_HPP ++#define TAOCPP_SEQUENCES_INCLUDE_MINUS_HPP ++ ++#include ++ ++#include "zip.hpp" ++ ++namespace tao ++{ ++ namespace seq ++ { ++ namespace impl ++ { ++ template< typename T, T A, T B > ++ using minus = std::integral_constant< T, A - B >; ++ } ++ ++ template< typename A, typename B > ++ using minus = zip< impl::minus, A, B >; ++ ++ template< typename A, typename B > ++ using minus_t = typename minus< A, B >::type; ++ } ++} ++ ++#endif // TAOCPP_SEQUENCES_INCLUDE_MINUS_HPP +diff -up chromium-62.0.3202.62/third_party/tao/seq/partial_sum.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/partial_sum.hpp +--- chromium-62.0.3202.62/third_party/tao/seq/partial_sum.hpp.epel7-c++11 2017-10-25 10:08:42.439573522 -0400 ++++ chromium-62.0.3202.62/third_party/tao/seq/partial_sum.hpp 2017-10-25 10:05:28.328204354 -0400 +@@ -0,0 +1,44 @@ ++// Copyright (c) 2015-2017 Daniel Frey ++// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ ++ ++#ifndef TAOCPP_SEQUENCES_INCLUDE_PARTIAL_SUM_HPP ++#define TAOCPP_SEQUENCES_INCLUDE_PARTIAL_SUM_HPP ++ ++#include ++#include ++ ++#include "make_integer_sequence.hpp" ++#include "sum.hpp" ++ ++namespace tao ++{ ++ namespace seq ++ { ++ namespace impl ++ { ++ template< std::size_t, typename S, typename = make_index_sequence< S::size() > > ++ struct partial_sum; ++ ++ template< std::size_t I, typename T, T... Ns, std::size_t... Is > ++ struct partial_sum< I, integer_sequence< T, Ns... >, index_sequence< Is... > > ++ : seq::sum< T, ( ( Is < I ) ? Ns : 0 )... > ++ { ++ static_assert( I <= sizeof...( Is ), "tao::seq::partial_sum: I is out of range" ); ++ }; ++ } ++ ++ template< std::size_t I, typename T, T... Ns > ++ struct partial_sum ++ : impl::partial_sum< I, integer_sequence< T, Ns... > > ++ { ++ }; ++ ++ template< std::size_t I, typename T, T... Ns > ++ struct partial_sum< I, integer_sequence< T, Ns... > > ++ : impl::partial_sum< I, integer_sequence< T, Ns... > > ++ { ++ }; ++ } ++} ++ ++#endif // TAOCPP_SEQUENCES_INCLUDE_PARTIAL_SUM_HPP +diff -up chromium-62.0.3202.62/third_party/tao/seq/plus.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/plus.hpp +--- chromium-62.0.3202.62/third_party/tao/seq/plus.hpp.epel7-c++11 2017-10-25 10:08:42.439573522 -0400 ++++ chromium-62.0.3202.62/third_party/tao/seq/plus.hpp 2017-10-25 10:05:28.328204354 -0400 +@@ -0,0 +1,29 @@ ++// Copyright (c) 2015-2017 Daniel Frey ++// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ ++ ++#ifndef TAOCPP_SEQUENCES_INCLUDE_PLUS_HPP ++#define TAOCPP_SEQUENCES_INCLUDE_PLUS_HPP ++ ++#include ++ ++#include "zip.hpp" ++ ++namespace tao ++{ ++ namespace seq ++ { ++ namespace impl ++ { ++ template< typename T, T A, T B > ++ using plus = std::integral_constant< T, A + B >; ++ } ++ ++ template< typename A, typename B > ++ using plus = zip< impl::plus, A, B >; ++ ++ template< typename A, typename B > ++ using plus_t = typename plus< A, B >::type; ++ } ++} ++ ++#endif // TAOCPP_SEQUENCES_INCLUDE_PLUS_HPP +diff -up chromium-62.0.3202.62/third_party/tao/seq/README.chromium.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/README.chromium +--- chromium-62.0.3202.62/third_party/tao/seq/README.chromium.epel7-c++11 2017-10-25 10:08:42.440573492 -0400 ++++ chromium-62.0.3202.62/third_party/tao/seq/README.chromium 2017-10-25 10:08:18.341272571 -0400 +@@ -0,0 +1,15 @@ ++Name: The Art of C++ / Sequences ++Short Name: tao/seq ++URL: https://github.com/taocpp/sequences ++Version: 5fd5378 ++License: MIT ++License File: LICENSE ++Security Critical: No ++ ++Description: ++Source archive: ++ https://github.com/taocpp/sequences ++ ++The Art of C++ / Sequences is a zero-dependency C++11 header-only library that provides efficient ++algorithms to generate and work on variadic templates and std::integer_sequence. ++We use it to support gcc 4.8. +diff -up chromium-62.0.3202.62/third_party/tao/seq/README.md.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/README.md +--- chromium-62.0.3202.62/third_party/tao/seq/README.md.epel7-c++11 2017-10-25 10:08:42.441573463 -0400 ++++ chromium-62.0.3202.62/third_party/tao/seq/README.md 2017-10-25 10:05:28.327204383 -0400 +@@ -0,0 +1,282 @@ ++# The Art of C++ / Sequences ++ ++[![Release](https://img.shields.io/github/release/taocpp/sequences.svg)](https://github.com/taocpp/sequences/releases/latest) ++[![TravisCI](https://travis-ci.org/taocpp/sequences.svg)](https://travis-ci.org/taocpp/sequences) ++[![AppVeyor](https://ci.appveyor.com/api/projects/status/github/taocpp/sequences?svg=true)](https://ci.appveyor.com/project/taocpp/sequences) ++ ++The Art of C++ / Sequences is a zero-dependency C++11 header-only library that provides efficient algorithms to generate and work on variadic templates and [`std::integer_sequence`](http://en.cppreference.com/w/cpp/utility/integer_sequence). ++ ++## Compatibility ++ ++* Requires C++11 or newer. ++* Tested with GCC 4.8+, Clang 3.4+, Xcode 6+ and Visual Studio 2017. ++ ++The following compilers have bugs which prevent our code from compiling: ++ ++* Clang 4.0. ++* Xcode 7 and 8 when used with C++14 or higher. ++* Visual Studio 2015. ++ ++(If you know how to fix those, please let us know) ++ ++Part of the library might still work, e.g. Clang 4.0 only has problems with `zip` and `fold` (and everything based on it). ++ ++## Provided algorithms and examples ++ ++* All provided templates are in the nested namespace `tao::seq`. ++* All templates don't use C++14 features, therefore being compatible with C++11. Sometimes, C++14/C++17 features are used conditionally, taking advantage of newer language features when available but providing C++11-compatible implementations otherwise. ++* All templates use `tao::seq::integer_sequence`, etc. internally, therefore being compatible with C++11. ++* All templates use `tao::seq::make_integer_sequence`, etc. internally, therefore using the most scalable solution available. ++ ++#### Header `tao/seq/integer_sequence.hpp` ++ ++Provides: ++ ++* `integer_sequence< typename T, T N >` ++* `index_sequence< std::size_t N >` ++ ++Notes: ++ ++* When available (C++14 or newer), the above are type-aliases for `std::integer_sequence` and `std::index_sequence`. ++ ++#### Header `tao/seq/make_integer_sequence.hpp` ++ ++Efficient versions of sequence generators. ++ ++* `make_integer_sequence< typename T, T N >` ++* `make_index_sequence< std::size_t N >` ++* `index_sequence_for< typename... Ts >` ++ ++Examples: ++ ++* `make_integer_sequence` ➙ `integer_sequence` ++* `make_integer_sequence` ➙ `integer_sequence` ++* `make_integer_sequence` ➙ `integer_sequence` ++* `make_index_sequence<0>` ➙ `index_sequence<>` ++* `make_index_sequence<1>` ➙ `index_sequence<0>` ++* `make_index_sequence<5>` ➙ `index_sequence<0,1,2,3,4>` ++* `index_sequence_for` ➙ `index_sequence<0,1,2>` ++ ++Notes: ++ ++libc++ already has very efficient versions for the above, so they are pulled in with a using-declaration. Only if we don't know if the STL's versions are at least O(log N) we provide our own implementations. ++ ++Our own implementation has O(log N) instantiation depth. This allows for very large sequences without the need to increase the compiler's default instantiation depth limits. For example, GCC and Clang generate `index_sequence<10000>` in ~0.15s (on my machine, of course). The standard library version from libstdc++, when trying to create `index_sequence<5000>` and with its O(N) implementation, requires ~30s, >3GB of RAM and `-ftemplate-depth=5100`. ++ ++#### Header `tao/seq/make_integer_range.hpp` ++ ++Generate half-open ranges of integers. ++ ++* `make_integer_range< typename T, T N, T M >` ++* `make_index_range< std::size_t N, std::size_t M >` ++ ++Examples: ++ ++* `make_integer_range` ➙ `integer_sequence` ++* `make_integer_range` ➙ `integer_sequence` ++* `make_integer_sequence` ➙ `integer_sequence` ++* `make_index_range<5,5>` ➙ `index_sequence<>` ++* `make_index_range<2,5>` ➙ `index_sequence<2,3,4>` ++ ++#### Header `tao/seq/sum.hpp` ++ ++Integral constant to provide the sum of `Ns`. ++ ++* `sum< typename T, T... Ns >` ++* `sum< typename S >` ++ ++Examples: ++ ++* `sum::value` ➙ `9` ++* `sum>::value` ➙ `10` ++ ++#### Header `tao/seq/partial_sum.hpp` ++ ++Integral constant to provide the sum of the first `I` elements of `Ns`. ++ ++* `partial_sum< std::size_t I, typename T, T... Ns >` ++* `partial_sum< std::size_t I, typename S >` ++ ++Examples: ++ ++* `partial_sum<0,int,1,4,3,1>::value` ➙ `0` ++* `partial_sum<2,int,1,4,3,1>::value` ➙ `5` ++* `partial_sum<4,make_index_sequence<5>>::value` ➙ `6` ++ ++#### Header `tao/seq/exclusive_scan.hpp` ++ ++Provides a sequence with the exclusive scan of the input sequence. ++ ++* `exclusive_scan_t< typename T, T... Ns >` ++* `exclusive_scan_t< typename S >` ++ ++Examples: ++ ++* `exclusive_scan_t` ➙ `integer_sequence` ++ ++#### Header `tao/seq/inclusive_scan.hpp` ++ ++Provides a sequence with the inclusive scan of the input sequence. ++ ++* `inclusive_scan_t< typename T, T... Ns >` ++* `inclusive_scan_t< typename S >` ++ ++Examples: ++ ++* `inclusive_scan_t` ➙ `integer_sequence` ++ ++#### Header `tao/seq/zip.hpp` ++ ++Applies a binary operation to elements from two sequences. ++ ++* `zip_t< template< typename U, U, U > class OP, typename L, typename R >` ++ ++Notes: ++ ++Both sequences may have a different element type, the resulting sequence's type is calculated with `std::common_type_t`. ++ ++#### Header `tao/seq/plus.hpp` ++ ++Provides a sequence which is the element-wise sum of its input sequences. ++ ++* `plus_t< typename L, typename R >` ++ ++Notes: ++ ++Both sequences may have a different element type, the resulting sequence's type is calculated with `std::common_type_t`. ++ ++Examples: ++ ++* `using A = index_sequence<1,4,0,3,1>` ++* `using B = make_index_sequence<5>` ++* `plus_t` ➙ `index_sequence<1,5,2,6,5>` ++ ++#### Header `tao/seq/minus.hpp` ++ ++Provides a sequence which is the element-wise sum of its input sequences. ++ ++* `minus_t< typename L, typename R >` ++ ++Notes: ++ ++Both sequences may have a different element type, the resulting sequence's type is calculated with `std::common_type_t`. ++ ++Examples: ++ ++* `using A = integer_sequence` ++* `using B = integer_sequence` ++* `minus_t` ➙ `integer_sequence` ++* `minus_t` ➙ `integer_sequence` ++ ++#### Header `tao/seq/head.hpp` ++ ++Integral constant to provide the first element of a non-empty sequence. ++ ++* `head< typename T, T... >` ++* `head< typename S >` ++ ++#### Header `tao/seq/tail.hpp` ++ ++Removed the first element of a non-empty sequence. ++ ++* `tail_t< typename T, T... >` ++* `tail_t< typename S >` ++ ++#### Header `tao/seq/select.hpp` ++ ++Integral constant to provide the `I`th element of a non-empty sequence. ++ ++* `select< std::size_t I, typename T, T... >` ++* `select< std::size_t I, typename S >` ++ ++#### Header `tao/seq/concatenate.hpp` ++ ++Concatenate the values. ++ ++* `concatenate_t< typename T, typename U >` ++ ++Notes: ++ ++Both sequences may have a different element type, the resulting sequence's type is calculated with `std::common_type_t`. ++ ++#### Header `tao/seq/fold.hpp` ++ ++Integral constant calculated by "folding" a sequence of values with a given binary operation. ++ ++* `fold< template< typename U, U, U > class OP, typename T, T... >` ++* `fold< template< typename U, U, U > class OP, typename S >` ++ ++#### Header `tao/seq/min.hpp` ++ ++Integral constant to provide the minimum value. ++ ++* `min< typename T, T... >` ++* `min< typename S >` ++ ++Notes: ++ ++Implemented with `fold` like this: ++ ++ namespace impl ++ { ++ template< typename T, T A, T B > ++ using min = std::integral_constant< T, ( ( A < B ) ? A : B ) >; ++ } ++ ++ template< typename T, T... Ns > ++ using min = fold< impl::min, T, Ns... >; ++ ++#### Header `tao/seq/max.hpp` ++ ++Integral constant to provide the maximum value. ++ ++* `max< typename T, T... >` ++* `max< typename S >` ++ ++#### Header `tao/seq/map.hpp` ++ ++Map a sequence of indices to a sequence of values. ++ ++* `map_t< typename I, typename M >` ++ ++Examples: ++ ++* `using I = index_sequence<1,0,3,2,1,1,3>` ++* `using M = integer_sequence` ++* `map_t` ➙ `integer_sequence` ++ ++#### Header `tao/seq/is_all.hpp` ++ ++Integral constant which is true if all boolean parameters are true (logical and). ++ ++* `is_all< bool... >` ++ ++Examples: ++ ++* `is_all::value` ➙ `true` ++* `is_all::value` ➙ `false` ++* `is_all<>::value` ➙ `true` ++ ++#### Header `tao/seq/is_any.hpp` ++ ++Integral constant which is true if any boolean parameter is true (logical or). ++ ++* `is_any< bool... >` ++ ++Examples: ++ ++* `is_any::value` ➙ `true` ++* `is_any::value` ➙ `false` ++* `is_any<>::value` ➙ `false` ++ ++## License ++ ++The Art of C++ is certified [Open Source](http://www.opensource.org/docs/definition.html) software. It may be used for any purpose, including commercial purposes, at absolutely no cost. It is distributed under the terms of the [MIT license](http://www.opensource.org/licenses/mit-license.html) reproduced here. ++ ++> Copyright (c) 2015-2017 Daniel Frey ++> ++> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: ++> ++> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. ++> ++> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +diff -up chromium-62.0.3202.62/third_party/tao/seq/scale.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/scale.hpp +--- chromium-62.0.3202.62/third_party/tao/seq/scale.hpp.epel7-c++11 2017-10-25 10:08:42.441573463 -0400 ++++ chromium-62.0.3202.62/third_party/tao/seq/scale.hpp 2017-10-25 10:05:28.328204354 -0400 +@@ -0,0 +1,66 @@ ++// Copyright (c) 2015-2017 Daniel Frey ++// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ ++ ++#ifndef TAOCPP_SEQUENCES_INCLUDE_SCALE_HPP ++#define TAOCPP_SEQUENCES_INCLUDE_SCALE_HPP ++ ++#include "integer_sequence.hpp" ++ ++namespace tao ++{ ++ namespace seq ++ { ++ namespace impl ++ { ++ template< typename T > ++ struct is_integer_sequence : std::false_type ++ { ++ }; ++ ++ template< typename T, T... Ns > ++ struct is_integer_sequence< integer_sequence< T, Ns... > > : std::true_type ++ { ++ }; ++ ++ template< typename T > ++ struct element_type ++ { ++ using type = T; ++ }; ++ ++ template< typename T, T... Ns > ++ struct element_type< integer_sequence< T, Ns... > > ++ { ++ using type = T; ++ }; ++ ++ template< bool, typename > ++ struct scale ++ { ++ template< typename T, T S, T... Ns > ++ struct impl ++ { ++ using type = integer_sequence< T, S * Ns... >; ++ }; ++ }; ++ ++ template< typename T, T... Ns > ++ struct scale< true, integer_sequence< T, Ns... > > ++ { ++ template< typename, T S > ++ struct impl ++ { ++ using type = integer_sequence< T, S * Ns... >; ++ }; ++ }; ++ } ++ ++ template< typename T, typename impl::element_type< T >::type S, typename impl::element_type< T >::type... Ns > ++ using scale = typename impl::scale< impl::is_integer_sequence< T >::value, T >::template impl< T, S, Ns... >; ++ ++ template< typename T, typename impl::element_type< T >::type S, typename impl::element_type< T >::type... Ns > ++ using scale_t = typename scale< T, S, Ns... >::type; ++ } ++} ++ ++#endif // TAOCPP_SEQUENCES_INCLUDE_SCALE_HPP +diff -up chromium-62.0.3202.62/third_party/tao/seq/select.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/select.hpp +--- chromium-62.0.3202.62/third_party/tao/seq/select.hpp.epel7-c++11 2017-10-25 10:08:42.442573435 -0400 ++++ chromium-62.0.3202.62/third_party/tao/seq/select.hpp 2017-10-25 10:05:28.328204354 -0400 +@@ -0,0 +1,31 @@ ++// Copyright (c) 2015-2017 Daniel Frey ++// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ ++ ++#ifndef TAOCPP_SEQUENCES_INCLUDE_SELECT_HPP ++#define TAOCPP_SEQUENCES_INCLUDE_SELECT_HPP ++ ++#include ++#include ++ ++#include "at_index.hpp" ++#include "integer_sequence.hpp" ++ ++namespace tao ++{ ++ namespace seq ++ { ++ template< std::size_t I, typename T, T... Ns > ++ struct select ++ : at_index_t< I, std::integral_constant< T, Ns >... > ++ { ++ }; ++ ++ template< std::size_t I, typename T, T... Ns > ++ struct select< I, integer_sequence< T, Ns... > > ++ : select< I, T, Ns... > ++ { ++ }; ++ } ++} ++ ++#endif // TAOCPP_SEQUENCES_INCLUDE_SELECT_HPP +diff -up chromium-62.0.3202.62/third_party/tao/seq/sum.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/sum.hpp +--- chromium-62.0.3202.62/third_party/tao/seq/sum.hpp.epel7-c++11 2017-10-25 10:08:42.443573405 -0400 ++++ chromium-62.0.3202.62/third_party/tao/seq/sum.hpp 2017-10-25 10:05:28.328204354 -0400 +@@ -0,0 +1,79 @@ ++// Copyright (c) 2015-2017 Daniel Frey ++// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ ++ ++#ifndef TAOCPP_SEQUENCES_INCLUDE_SUM_HPP ++#define TAOCPP_SEQUENCES_INCLUDE_SUM_HPP ++ ++#include ++#include ++ ++#include "config.hpp" ++#include "integer_sequence.hpp" ++ ++#ifndef TAOCPP_FOLD_EXPRESSIONS ++#include "make_integer_sequence.hpp" ++#include ++#endif ++ ++namespace tao ++{ ++ namespace seq ++ { ++ ++#ifdef TAOCPP_FOLD_EXPRESSIONS ++ ++ template< typename T, T... Ns > ++ struct sum ++ : std::integral_constant< T, ( Ns + ... + T( 0 ) ) > ++ { ++ }; ++ ++#else ++ ++ namespace impl ++ { ++ template< std::size_t, std::size_t N > ++ struct chars ++ { ++ char dummy[ N + 1 ]; ++ }; ++ ++ template< typename, std::size_t... > ++ struct collector; ++ ++ template< std::size_t... Is, std::size_t... Ns > ++ struct collector< index_sequence< Is... >, Ns... > ++ : chars< Is, Ns >... ++ { ++ }; ++ ++ template< bool, std::size_t N, typename T, T... Ns > ++ struct sum ++ { ++ using type = std::integral_constant< T, T( sizeof( collector< make_index_sequence< N >, ( ( Ns > 0 ) ? Ns : 0 )... > ) - N ) - T( sizeof( collector< make_index_sequence< N >, ( ( Ns < 0 ) ? -Ns : 0 )... > ) - N ) >; ++ }; ++ ++ template< std::size_t N, typename T, T... Ns > ++ struct sum< true, N, T, Ns... > ++ { ++ using type = std::integral_constant< T, T( sizeof( collector< make_index_sequence< N >, ( ( Ns > 0 ) ? Ns : 0 )... > ) - N ) >; ++ }; ++ } ++ ++ template< typename T, T... Ns > ++ struct sum ++ : impl::sum< std::is_unsigned< T >::value, sizeof...( Ns ) + 1, T, Ns..., 0 >::type ++ { ++ }; ++ ++#endif ++ ++ template< typename T, T... Ns > ++ struct sum< integer_sequence< T, Ns... > > ++ : sum< T, Ns... > ++ { ++ }; ++ } ++} ++ ++#endif // TAOCPP_SEQUENCES_INCLUDE_SUM_HPP +diff -up chromium-62.0.3202.62/third_party/tao/seq/tail.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/tail.hpp +--- chromium-62.0.3202.62/third_party/tao/seq/tail.hpp.epel7-c++11 2017-10-25 10:08:42.444573376 -0400 ++++ chromium-62.0.3202.62/third_party/tao/seq/tail.hpp 2017-10-25 10:05:28.329204325 -0400 +@@ -0,0 +1,35 @@ ++// Copyright (c) 2015-2017 Daniel Frey ++// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ ++ ++#ifndef TAOCPP_SEQUENCES_INCLUDE_TAIL_HPP ++#define TAOCPP_SEQUENCES_INCLUDE_TAIL_HPP ++ ++#include ++ ++#include "integer_sequence.hpp" ++ ++namespace tao ++{ ++ namespace seq ++ { ++ template< typename T, T... Ns > ++ struct tail; ++ ++ template< typename T, T N, T... Ns > ++ struct tail< T, N, Ns... > ++ { ++ using type = integer_sequence< T, Ns... >; ++ }; ++ ++ template< typename T, T... Ns > ++ struct tail< integer_sequence< T, Ns... > > ++ : tail< T, Ns... > ++ { ++ }; ++ ++ template< typename T, T... Ns > ++ using tail_t = typename tail< T, Ns... >::type; ++ } ++} ++ ++#endif // TAOCPP_SEQUENCES_INCLUDE_TAIL_HPP +diff -up chromium-62.0.3202.62/third_party/tao/seq/type_by_index.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/type_by_index.hpp +--- chromium-62.0.3202.62/third_party/tao/seq/type_by_index.hpp.epel7-c++11 2017-10-25 10:08:42.445573347 -0400 ++++ chromium-62.0.3202.62/third_party/tao/seq/type_by_index.hpp 2017-10-25 10:05:28.329204325 -0400 +@@ -0,0 +1,57 @@ ++// Copyright (c) 2015-2017 Daniel Frey ++// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ ++ ++#ifndef TAOCPP_SEQUENCES_INCLUDE_TYPE_BY_INDEX_HPP ++#define TAOCPP_SEQUENCES_INCLUDE_TYPE_BY_INDEX_HPP ++ ++#include ++#include ++ ++#include "make_integer_sequence.hpp" ++ ++namespace tao ++{ ++ namespace seq ++ { ++ // based on http://stackoverflow.com/questions/18942322 ++ ++ namespace impl ++ { ++ template< std::size_t > ++ struct any ++ { ++ any( ... ); ++ }; ++ ++ template< typename > ++ struct wrapper; ++ ++ template< typename > ++ struct unwrap; ++ ++ template< typename T > ++ struct unwrap< wrapper< T > > ++ { ++ using type = T; ++ }; ++ ++ template< typename > ++ struct get_nth; ++ ++ template< std::size_t... Is > ++ struct get_nth< index_sequence< Is... > > ++ { ++ template< typename T > ++ static T deduce( any< Is & 0 >..., T*, ... ); ++ }; ++ } ++ ++ template< std::size_t I, typename... Ts > ++ using type_by_index = impl::unwrap< decltype( impl::get_nth< make_index_sequence< I > >::deduce( std::declval< impl::wrapper< Ts >* >()... ) ) >; ++ ++ template< std::size_t I, typename... Ts > ++ using type_by_index_t = typename type_by_index< I, Ts... >::type; ++ } ++} ++ ++#endif // TAOCPP_SEQUENCES_INCLUDE_TYPE_BY_INDEX_HPP +diff -up chromium-62.0.3202.62/third_party/tao/seq/zip.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/zip.hpp +--- chromium-62.0.3202.62/third_party/tao/seq/zip.hpp.epel7-c++11 2017-10-25 10:08:42.446573319 -0400 ++++ chromium-62.0.3202.62/third_party/tao/seq/zip.hpp 2017-10-25 10:05:28.329204325 -0400 +@@ -0,0 +1,30 @@ ++// Copyright (c) 2015-2017 Daniel Frey ++// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ ++ ++#ifndef TAOCPP_SEQUENCES_INCLUDE_ZIP_HPP ++#define TAOCPP_SEQUENCES_INCLUDE_ZIP_HPP ++ ++#include ++ ++#include "integer_sequence.hpp" ++ ++namespace tao ++{ ++ namespace seq ++ { ++ template< template< typename U, U, U > class, typename, typename > ++ struct zip; ++ ++ template< template< typename U, U, U > class OP, typename TA, TA... As, typename TB, TB... Bs > ++ struct zip< OP, integer_sequence< TA, As... >, integer_sequence< TB, Bs... > > ++ { ++ using CT = typename std::common_type< TA, TB >::type; ++ using type = integer_sequence< CT, OP< CT, As, Bs >::value... >; ++ }; ++ ++ template< template< typename U, U, U > class OP, typename A, typename B > ++ using zip_t = typename zip< OP, A, B >::type; ++ } ++} ++ ++#endif // TAOCPP_SEQUENCES_INCLUDE_ZIP_HPP +diff -up chromium-62.0.3202.62/tools/ipc_fuzzer/fuzzer/fuzzer.cc.epel7-c++11 chromium-62.0.3202.62/tools/ipc_fuzzer/fuzzer/fuzzer.cc +--- chromium-62.0.3202.62/tools/ipc_fuzzer/fuzzer/fuzzer.cc.epel7-c++11 2017-10-25 10:18:10.415133815 -0400 ++++ chromium-62.0.3202.62/tools/ipc_fuzzer/fuzzer/fuzzer.cc 2017-10-25 10:18:58.888807178 -0400 +@@ -23,6 +23,7 @@ + #include "tools/ipc_fuzzer/fuzzer/rand_util.h" + #include "tools/ipc_fuzzer/message_lib/message_cracker.h" + #include "tools/ipc_fuzzer/message_lib/message_file.h" ++#include "third_party/tao/seq/integer_sequence.hpp" + + #if defined(OS_POSIX) + #include +@@ -1680,14 +1681,14 @@ class FuzzerHelper, void>; + + static std::unique_ptr Fuzz(IPC::Message* msg, Fuzzer* fuzzer) { +- return FuzzImpl(msg, fuzzer, std::index_sequence_for()); ++ return FuzzImpl(msg, fuzzer, tao::seq::index_sequence_for()); + } + + private: + template + static std::unique_ptr FuzzImpl(IPC::Message* msg, + Fuzzer* fuzzer, +- std::index_sequence) { ++ tao::seq::index_sequence) { + typename Message::Param p; + if (msg) { + Message::Read(static_cast(msg), &p); +@@ -1707,14 +1708,14 @@ class FuzzerHelper< + using Message = IPC::MessageT, std::tuple>; + + static std::unique_ptr Fuzz(IPC::Message* msg, Fuzzer* fuzzer) { +- return FuzzImpl(msg, fuzzer, std::index_sequence_for()); ++ return FuzzImpl(msg, fuzzer, tao::seq::index_sequence_for()); + } + + private: + template + static std::unique_ptr FuzzImpl(IPC::Message* msg, + Fuzzer* fuzzer, +- std::index_sequence) { ++ tao::seq::index_sequence) { + typename Message::SendParam p; + Message* real_msg = static_cast(msg); + std::unique_ptr new_msg; diff --git a/chromium.spec b/chromium.spec index 14d6ef4..da74cc5 100644 --- a/chromium.spec +++ b/chromium.spec @@ -218,7 +218,7 @@ Patch63: chromium-gn-bootstrap-r17.patch Patch64: chromium-62.0.3202.62-correct-cplusplus-check.patch # epel7 does not know about c++14 Patch65: chromium-62.0.3202.62-epel7-noc++14.patch -Patch66: chromium-62.0.3202.62-epel7-c++11-decay-enable_if-type.patch +Patch66: chromium-62.0.3202.62-epel7-c++11-support.patch ### Chromium Tests Patches ### Patch100: chromium-46.0.2490.86-use_system_opus.patch @@ -990,6 +990,10 @@ build/linux/unbundle/remove_bundled_libraries.py \ 'third_party/swiftshader/third_party/subzero' \ 'third_party/swiftshader/third_party/LLVM' \ 'third_party/swiftshader/third_party/llvm-subzero' \ +%if 0%{?rhel} == 7 + 'third_party/tao' \ + 'third_party/tao/seq' \ +%endif 'third_party/tcmalloc' \ 'third_party/usb_ids' \ 'third_party/usrsctp' \ From 4b560f74014f2dfab00e81ba329a0a0849188962 Mon Sep 17 00:00:00 2001 From: Tom Callaway Date: Fri, 27 Oct 2017 11:02:21 -0400 Subject: [PATCH 10/10] 62.0.3202.75 --- .gitignore | 1 + ...ium-62.0.3202.62-epel7-c++11-support.patch | 1980 ----------------- chromium-62.0.3202.62-epel7-noc++14.patch | 12 - chromium.spec | 33 +- sources | 2 +- 5 files changed, 20 insertions(+), 2008 deletions(-) delete mode 100644 chromium-62.0.3202.62-epel7-c++11-support.patch delete mode 100644 chromium-62.0.3202.62-epel7-noc++14.patch diff --git a/.gitignore b/.gitignore index 33c625a..da86396 100644 --- a/.gitignore +++ b/.gitignore @@ -31,3 +31,4 @@ /chromium-60.0.3112.113.tar.xz /chromium-61.0.3163.79-clean.tar.xz /chromium-61.0.3163.100-clean.tar.xz +/chromium-62.0.3202.75-clean.tar.xz diff --git a/chromium-62.0.3202.62-epel7-c++11-support.patch b/chromium-62.0.3202.62-epel7-c++11-support.patch deleted file mode 100644 index eb4339a..0000000 --- a/chromium-62.0.3202.62-epel7-c++11-support.patch +++ /dev/null @@ -1,1980 +0,0 @@ -diff -up chromium-62.0.3202.62/base/bind_helpers.h.epel7-c++11 chromium-62.0.3202.62/base/bind_helpers.h ---- chromium-62.0.3202.62/base/bind_helpers.h.epel7-c++11 2017-10-25 08:50:15.692276363 -0400 -+++ chromium-62.0.3202.62/base/bind_helpers.h 2017-10-25 09:12:15.889484145 -0400 -@@ -282,7 +282,7 @@ class PassedWrapper { - }; - - template --using Unwrapper = BindUnwrapTraits>; -+using Unwrapper = BindUnwrapTraits::type>; - - template - auto Unwrap(T&& o) -> decltype(Unwrapper::Unwrap(std::forward(o))) { -@@ -438,7 +438,7 @@ static inline internal::OwnedWrapper - // Both versions of Passed() prevent T from being an lvalue reference. The first - // via use of enable_if, and the second takes a T* which will not bind to T&. - template ::value>* = nullptr> -+ typename std::enable_if::value>::type* = nullptr> - static inline internal::PassedWrapper Passed(T&& scoper) { - return internal::PassedWrapper(std::move(scoper)); - } -@@ -537,9 +537,9 @@ template , -- std::enable_if_t< -+ typename std::enable_if< - internal::IsWeakMethod::is_method, -- BoundArgs...>::value>> { -+ BoundArgs...>::value>::type> { - static constexpr bool is_cancellable = true; - - template -diff -up chromium-62.0.3202.62/base/bind.h.epel7-c++11 chromium-62.0.3202.62/base/bind.h ---- chromium-62.0.3202.62/base/bind.h.epel7-c++11 2017-10-25 08:55:22.603877014 -0400 -+++ chromium-62.0.3202.62/base/bind.h 2017-10-25 10:12:28.753008563 -0400 -@@ -7,6 +7,8 @@ - - #include - -+#include "third_party/tao/seq/integer_sequence.hpp" -+#include "third_party/tao/seq/make_integer_sequence.hpp" - #include "base/bind_internal.h" - - // ----------------------------------------------------------------------------- -@@ -53,7 +55,7 @@ struct AssertConstructible { - // reference with repeating callbacks--is used instead of base::Passed(). - static_assert( - param_is_forwardable || -- !std::is_constructible&&>::value, -+ !std::is_constructible::type&&>::value, - "Bound argument |i| is move-only but will be forwarded by copy. " - "Ensure |Arg| is bound using base::Passed(), not std::move()."); - static_assert( -@@ -64,7 +66,7 @@ struct AssertConstructible { - static constexpr bool arg_is_storable = - std::is_constructible::value; - static_assert(arg_is_storable || -- !std::is_constructible&&>::value, -+ !std::is_constructible::type&&>::value, - "Bound argument |i| is move-only but will be bound by copy. " - "Ensure |Arg| is mutable and bound using std::move()."); - static_assert(arg_is_storable, -@@ -84,11 +86,11 @@ template --struct AssertBindArgsValidity, -+struct AssertBindArgsValidity, - TypeList, - TypeList, - TypeList> -- : AssertConstructible, Unwrapped, Params>... { -+ : AssertConstructible::type, Unwrapped, Params>... { - static constexpr bool ok = true; - }; - -@@ -98,14 +100,14 @@ struct TransformToUnwrappedTypeImpl; - - template - struct TransformToUnwrappedTypeImpl { -- using StoredType = std::decay_t; -+ using StoredType = typename std::decay::type; - using ForwardType = StoredType&&; - using Unwrapped = decltype(Unwrap(std::declval())); - }; - - template - struct TransformToUnwrappedTypeImpl { -- using StoredType = std::decay_t; -+ using StoredType = typename std::decay::type; - using ForwardType = const StoredType&; - using Unwrapped = decltype(Unwrap(std::declval())); - }; -@@ -153,7 +155,7 @@ using MakeUnwrappedTypeList = - template - inline OnceCallback> - BindOnce(Functor&& functor, Args&&... args) { -- static_assert(!internal::IsOnceCallback>() || -+ static_assert(!internal::IsOnceCallback::type>() || - (std::is_rvalue_reference() && - !std::is_const>()), - "BindOnce requires non-const rvalue for OnceCallback binding." -@@ -170,7 +172,7 @@ BindOnce(Functor&& functor, Args&&... ar - Args&&...>; - using BoundParamsList = typename Helper::BoundParamsList; - static_assert(internal::AssertBindArgsValidity< -- std::make_index_sequence, BoundArgsList, -+ tao::seq::make_index_sequence, BoundArgsList, - UnwrappedArgsList, BoundParamsList>::ok, - "The bound args need to be convertible to the target params."); - -@@ -197,7 +199,7 @@ template > - BindRepeating(Functor&& functor, Args&&... args) { - static_assert( -- !internal::IsOnceCallback>(), -+ !internal::IsOnceCallback::type>(), - "BindRepeating cannot bind OnceCallback. Use BindOnce with std::move()."); - - // This block checks if each |args| matches to the corresponding params of the -@@ -211,7 +213,7 @@ BindRepeating(Functor&& functor, Args&&. - Args&&...>; - using BoundParamsList = typename Helper::BoundParamsList; - static_assert(internal::AssertBindArgsValidity< -- std::make_index_sequence, BoundArgsList, -+ tao::seq::make_index_sequence, BoundArgsList, - UnwrappedArgsList, BoundParamsList>::ok, - "The bound args need to be convertible to the target params."); - -diff -up chromium-62.0.3202.62/base/bind_internal.h.epel7-c++11 chromium-62.0.3202.62/base/bind_internal.h ---- chromium-62.0.3202.62/base/bind_internal.h.epel7-c++11 2017-10-25 08:52:20.018873878 -0400 -+++ chromium-62.0.3202.62/base/bind_internal.h 2017-10-25 10:14:03.619256659 -0400 -@@ -15,6 +15,8 @@ - #include "base/memory/raw_scoped_refptr_mismatch_checker.h" - #include "base/memory/weak_ptr.h" - #include "base/template_util.h" -+#include "third_party/tao/seq/integer_sequence.hpp" -+#include "third_party/tao/seq/make_integer_sequence.hpp" - #include "build/build_config.h" - - namespace base { -@@ -98,9 +100,9 @@ struct HasRefCountedTypeAsRawPtr : std:: - // parameters recursively. - template - struct HasRefCountedTypeAsRawPtr -- : std::conditional_t::value, -+ : typedef std::conditional::value, - std::true_type, -- HasRefCountedTypeAsRawPtr> {}; -+ HasRefCountedTypeAsRawPtr::type> {}; - - // ForceVoidReturn<> - // -@@ -125,7 +127,7 @@ struct FunctorTraits; - // to the function type while capturing lambdas can't. - template - struct FunctorTraits::value>> { -+ typename std::enable_if::value>::type> { - using RunType = ExtractCallableRunType; - static constexpr bool is_method = false; - static constexpr bool is_nullable = false; -@@ -256,7 +258,7 @@ struct FunctorTraits --using MakeFunctorTraits = FunctorTraits>; -+using MakeFunctorTraits = FunctorTraits::type>; - - // InvokeHelper<> - // -@@ -317,7 +319,7 @@ struct Invokerbound_args_)>::value; - return RunImpl(std::move(storage->functor_), - std::move(storage->bound_args_), -- std::make_index_sequence(), -+ tao::seq::make_index_sequence(), - std::forward(unbound_args)...); - } - -@@ -329,7 +331,7 @@ struct Invokerbound_args_)>::value; - return RunImpl(storage->functor_, storage->bound_args_, -- std::make_index_sequence(), -+ tao::seq::make_index_sequence(), - std::forward(unbound_args)...); - } - -@@ -337,11 +339,11 @@ struct Invoker - static inline R RunImpl(Functor&& functor, - BoundArgsTuple&& bound, -- std::index_sequence, -+ tao::seq::index_sequence, - UnboundArgs&&... unbound_args) { - static constexpr bool is_method = MakeFunctorTraits::is_method; - -- using DecayedArgsTuple = std::decay_t; -+ using DecayedArgsTuple = typename std::decay::type; - static constexpr bool is_weak_call = - IsWeakMethod...>(); -@@ -383,13 +385,13 @@ struct BindTypeHelper { - }; - - template --std::enable_if_t::is_nullable, bool> IsNull( -+typename std::enable_if::is_nullable, bool>::type IsNull( - const Functor& functor) { - return !functor; - } - - template --std::enable_if_t::is_nullable, bool> IsNull( -+typename std::enable_if::is_nullable, bool>::type IsNull( - const Functor&) { - return false; - } -@@ -398,7 +400,7 @@ std::enable_if_t - template - bool ApplyCancellationTraitsImpl(const Functor& functor, - const BoundArgsTuple& bound_args, -- std::index_sequence) { -+ tao::seq::index_sequence) { - return CallbackCancellationTraits::IsCancelled( - functor, std::get(bound_args)...); - } -@@ -412,7 +414,7 @@ bool ApplyCancellationTraits(const BindS - std::tuple_sizebound_args_)>::value; - return ApplyCancellationTraitsImpl( - storage->functor_, storage->bound_args_, -- std::make_index_sequence()); -+ tao::seq::make_index_sequence()); - }; - - // BindState<> -@@ -479,33 +481,33 @@ struct MakeBindStateTypeImpl; - - template - struct MakeBindStateTypeImpl { -- static_assert(!HasRefCountedTypeAsRawPtr...>::value, -+ static_assert(!HasRefCountedTypeAsRawPtr::type...>::value, - "A parameter is a refcounted type and needs scoped_refptr."); -- using Type = BindState, std::decay_t...>; -+ using Type = BindState::type, typename std::decay::type...>; - }; - - template - struct MakeBindStateTypeImpl { -- using Type = BindState>; -+ using Type = BindState::type>; - }; - - template - struct MakeBindStateTypeImpl { - static_assert(!std::is_array>::value, - "First bound argument to a method cannot be an array."); -- static_assert(!HasRefCountedTypeAsRawPtr...>::value, -+ static_assert(!HasRefCountedTypeAsRawPtr::type...>::value, - "A parameter is a refcounted type and needs scoped_refptr."); - - private: -- using DecayedReceiver = std::decay_t; -+ using DecayedReceiver = typename std::decay::type; - - public: - using Type = BindState< -- std::decay_t, -- std::conditional_t::value, -+ typename std::decay::type, -+ typename std::conditional::value, - scoped_refptr>, -- DecayedReceiver>, -- std::decay_t...>; -+ DecayedReceiver>::type, -+ typename std::decay::type...>; - }; - - template -diff -up chromium-62.0.3202.62/base/containers/span.h.epel7-c++11 chromium-62.0.3202.62/base/containers/span.h ---- chromium-62.0.3202.62/base/containers/span.h.epel7-c++11 2017-10-25 08:51:25.260372472 -0400 -+++ chromium-62.0.3202.62/base/containers/span.h 2017-10-25 09:13:53.035964265 -0400 -@@ -27,7 +27,7 @@ template - struct IsSpanImpl> : std::true_type {}; - - template --using IsSpan = IsSpanImpl>; -+using IsSpan = IsSpanImpl::type>; - - template - struct IsStdArrayImpl : std::false_type {}; -@@ -36,7 +36,7 @@ template - struct IsStdArrayImpl> : std::true_type {}; - - template --using IsStdArray = IsStdArrayImpl>; -+using IsStdArray = IsStdArrayImpl::type>; - - template - using IsLegalSpanConversion = std::is_convertible; -@@ -51,7 +51,7 @@ using ContainerHasIntegralSize = - - template - using EnableIfLegalSpanConversion = -- std::enable_if_t::value>; -+ typename std::enable_if::value>::type; - - // SFINAE check if Container can be converted to a span. Note that the - // implementation details of this check differ slightly from the requirements in -@@ -67,18 +67,18 @@ using EnableIfLegalSpanConversion = - // container. - template - using EnableIfSpanCompatibleContainer = -- std::enable_if_t::value && -+ typename std::enable_if::value && - !internal::IsStdArray::value && - ContainerHasConvertibleData::value && -- ContainerHasIntegralSize::value>; -+ ContainerHasIntegralSize::value>::type; - - template - using EnableIfConstSpanCompatibleContainer = -- std::enable_if_t::value && -+ typename std::enable_if::value && - !internal::IsSpan::value && - !internal::IsStdArray::value && - ContainerHasConvertibleData::value && -- ContainerHasIntegralSize::value>; -+ ContainerHasIntegralSize::value>::type; - - } // namespace internal - -diff -up chromium-62.0.3202.62/base/tuple.h.epel7-c++11 chromium-62.0.3202.62/base/tuple.h ---- chromium-62.0.3202.62/base/tuple.h.epel7-c++11 2017-10-25 10:09:22.986397329 -0400 -+++ chromium-62.0.3202.62/base/tuple.h 2017-10-25 10:11:00.392571745 -0400 -@@ -29,6 +29,7 @@ - #include - #include - -+#include "third_party/tao/seq/integer_sequence.hpp" - #include "build/build_config.h" - - namespace base { -@@ -52,7 +53,7 @@ template ) { -+ tao::seq::index_sequence) { - (obj->*method)(std::get(std::forward(args))...); - } - -@@ -69,7 +70,7 @@ inline void DispatchToMethod(const ObjT& - template - inline void DispatchToFunctionImpl(Function function, - Tuple&& args, -- std::index_sequence) { -+ tao::seq::index_sequence) { - (*function)(std::get(std::forward(args))...); - } - -@@ -91,8 +92,8 @@ inline void DispatchToMethodImpl(const O - Method method, - InTuple&& in, - OutTuple* out, -- std::index_sequence, -- std::index_sequence) { -+ tao::seq::index_sequence, -+ tao::seq::index_sequence) { - (obj->*method)(std::get(std::forward(in))..., - &std::get(*out)...); - } -diff -up chromium-62.0.3202.62/components/login/base_screen_handler_utils.h.epel7-c++11 chromium-62.0.3202.62/components/login/base_screen_handler_utils.h ---- chromium-62.0.3202.62/components/login/base_screen_handler_utils.h.epel7-c++11 2017-10-25 10:14:43.493099988 -0400 -+++ chromium-62.0.3202.62/components/login/base_screen_handler_utils.h 2017-10-25 10:15:17.679108311 -0400 -@@ -17,6 +17,7 @@ - #include "base/values.h" - #include "components/login/login_export.h" - #include "components/signin/core/account_id/account_id.h" -+#include "third_party/tao/seq/integer_sequence.hpp" - - namespace login { - -@@ -86,7 +87,7 @@ typename UnwrapConstRef::Type Parse - template - inline void DispatchToCallback(const base::Callback& callback, - const base::ListValue* args, -- std::index_sequence indexes) { -+ tao::seq::index_sequence indexes) { - DCHECK(args); - DCHECK_EQ(sizeof...(Args), args->GetSize()); - -@@ -96,7 +97,7 @@ inline void DispatchToCallback(const bas - template - void CallbackWrapper(const base::Callback& callback, - const base::ListValue* args) { -- DispatchToCallback(callback, args, std::index_sequence_for()); -+ DispatchToCallback(callback, args, tao::seq::index_sequence_for()); - } - - -diff -up chromium-62.0.3202.62/ipc/ipc_message_templates.h.epel7-c++11 chromium-62.0.3202.62/ipc/ipc_message_templates.h ---- chromium-62.0.3202.62/ipc/ipc_message_templates.h.epel7-c++11 2017-10-25 09:15:02.382879317 -0400 -+++ chromium-62.0.3202.62/ipc/ipc_message_templates.h 2017-10-25 10:16:41.889665510 -0400 -@@ -17,11 +17,13 @@ - #include "build/build_config.h" - #include "ipc/ipc_message.h" - #include "ipc/ipc_message_utils.h" -+#include "third_party/tao/seq/integer_sequence.hpp" -+#include "third_party/tao/seq/make_integer_sequence.hpp" - - namespace IPC { - - template --auto TupleForwardImpl(Tuple&& tuple, std::index_sequence) -> decltype( -+auto TupleForwardImpl(Tuple&& tuple, tao::seq::index_sequence) -> decltype( - std::forward_as_tuple(std::get(std::forward(tuple))...)) { - return std::forward_as_tuple(std::get(std::forward(tuple))...); - } -@@ -38,10 +40,10 @@ auto TupleForwardImpl(Tuple&& tuple, std - template - auto TupleForward(Tuple&& tuple) -> decltype(TupleForwardImpl( - std::forward(tuple), -- std::make_index_sequence>::value>())) { -+ tao::seq::make_index_sequence>::value>())) { - return TupleForwardImpl( - std::forward(tuple), -- std::make_index_sequence>::value>()); -+ tao::seq::make_index_sequence>::value>()); - } - - // This function is for all the async IPCs that don't pass an extra parameter -@@ -60,21 +62,21 @@ void DispatchToMethodImpl(ObjT* obj, - Method method, - P* parameter, - Tuple&& tuple, -- std::index_sequence) { -+ tao::seq::index_sequence) { - (obj->*method)(parameter, std::get(std::forward(tuple))...); - } - - // The following function is for async IPCs which have a dispatcher with an - // extra parameter specified using IPC_BEGIN_MESSAGE_MAP_WITH_PARAM. - template --std::enable_if_t>::value> -+typename std::enable_if>::value>::type - DispatchToMethod(ObjT* obj, - void (ObjT::*method)(P*, Args...), - P* parameter, - Tuple&& tuple) { - constexpr size_t size = std::tuple_size>::value; - DispatchToMethodImpl(obj, method, parameter, std::forward(tuple), -- std::make_index_sequence()); -+ tao::seq::make_index_sequence()); - } - - enum class MessageKind { -diff -up chromium-62.0.3202.62/ppapi/proxy/dispatch_reply_message.h.epel7-c++11 chromium-62.0.3202.62/ppapi/proxy/dispatch_reply_message.h ---- chromium-62.0.3202.62/ppapi/proxy/dispatch_reply_message.h.epel7-c++11 2017-10-25 10:16:53.888317449 -0400 -+++ chromium-62.0.3202.62/ppapi/proxy/dispatch_reply_message.h 2017-10-25 10:17:50.152688363 -0400 -@@ -17,6 +17,7 @@ - #include "base/tuple.h" - #include "ipc/ipc_message_macros.h" - #include "ppapi/c/pp_errors.h" -+#include "third_party/tao/seq/integer_sequence.hpp" - - namespace ppapi { - namespace proxy { -@@ -28,7 +29,7 @@ inline void DispatchResourceReplyImpl(Ob - Method method, - const ResourceMessageReplyParams& params, - TupleType&& args_tuple, -- std::index_sequence) { -+ tao::seq::index_sequence) { - (obj->*method)(params, - std::get(std::forward(args_tuple))...); - } -@@ -51,7 +52,7 @@ template ) { -+ tao::seq::index_sequence) { - std::forward(callback).Run( - params, std::get(std::forward(args_tuple))...); - } -diff -up chromium-62.0.3202.62/third_party/tao/seq/at_index.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/at_index.hpp ---- chromium-62.0.3202.62/third_party/tao/seq/at_index.hpp.epel7-c++11 2017-10-25 10:08:42.418574130 -0400 -+++ chromium-62.0.3202.62/third_party/tao/seq/at_index.hpp 2017-10-25 10:05:28.328204354 -0400 -@@ -0,0 +1,60 @@ -+// Copyright (c) 2015-2017 Daniel Frey -+// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ -+ -+#ifndef TAOCPP_SEQUENCES_INCLUDE_AT_INDEX_HPP -+#define TAOCPP_SEQUENCES_INCLUDE_AT_INDEX_HPP -+ -+#include -+ -+#include "make_integer_sequence.hpp" -+ -+namespace tao -+{ -+ namespace seq -+ { -+ // based on http://talesofcpp.fusionfenix.com/post-22/true-story-efficient-packing -+ -+ namespace impl -+ { -+ template< std::size_t, typename T > -+ struct indexed -+ { -+ using type = T; -+ }; -+ -+ template< typename, typename... Ts > -+ struct indexer; -+ -+ template< std::size_t... Is, typename... Ts > -+ struct indexer< index_sequence< Is... >, Ts... > -+ : indexed< Is, Ts >... -+ { -+ }; -+ -+ template< std::size_t I, typename T > -+ indexed< I, T > select( const indexed< I, T >& ); -+ } -+ -+ template< std::size_t I, typename... Ts > -+ using at_index = decltype( impl::select< I >( impl::indexer< index_sequence_for< Ts... >, Ts... >() ) ); -+ -+#ifndef _MSC_VER -+ template< std::size_t I, typename... Ts > -+ using at_index_t = typename at_index< I, Ts... >::type; -+#else -+ namespace impl -+ { -+ template< typename T > -+ struct get_type -+ { -+ using type = typename T::type; -+ }; -+ } -+ -+ template< std::size_t I, typename... Ts > -+ using at_index_t = typename impl::get_type< at_index< I, Ts... > >::type; -+#endif -+ } -+} -+ -+#endif // TAOCPP_SEQUENCES_INCLUDE_AT_INDEX_HPP -diff -up chromium-62.0.3202.62/third_party/tao/seq/concatenate.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/concatenate.hpp ---- chromium-62.0.3202.62/third_party/tao/seq/concatenate.hpp.epel7-c++11 2017-10-25 10:08:42.422574014 -0400 -+++ chromium-62.0.3202.62/third_party/tao/seq/concatenate.hpp 2017-10-25 10:05:28.328204354 -0400 -@@ -0,0 +1,29 @@ -+// Copyright (c) 2015-2017 Daniel Frey -+// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ -+ -+#ifndef TAOCPP_SEQUENCES_INCLUDE_CONCATENATE_HPP -+#define TAOCPP_SEQUENCES_INCLUDE_CONCATENATE_HPP -+ -+#include -+ -+#include "integer_sequence.hpp" -+ -+namespace tao -+{ -+ namespace seq -+ { -+ template< typename, typename > -+ struct concatenate; -+ -+ template< typename TA, TA... As, typename TB, TB... Bs > -+ struct concatenate< integer_sequence< TA, As... >, integer_sequence< TB, Bs... > > -+ { -+ using type = integer_sequence< typename std::common_type< TA, TB >::type, As..., Bs... >; -+ }; -+ -+ template< typename A, typename B > -+ using concatenate_t = typename concatenate< A, B >::type; -+ } -+} -+ -+#endif // TAOCPP_SEQUENCES_INCLUDE_CONCATENATE_HPP -diff -up chromium-62.0.3202.62/third_party/tao/seq/config.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/config.hpp ---- chromium-62.0.3202.62/third_party/tao/seq/config.hpp.epel7-c++11 2017-10-25 10:08:42.428573840 -0400 -+++ chromium-62.0.3202.62/third_party/tao/seq/config.hpp 2017-10-25 10:05:28.328204354 -0400 -@@ -0,0 +1,25 @@ -+// Copyright (c) 2015-2017 Daniel Frey -+// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ -+ -+#ifndef TAOCPP_SEQUENCES_INCLUDE_CONFIG_HPP -+#define TAOCPP_SEQUENCES_INCLUDE_CONFIG_HPP -+ -+#if __cplusplus >= 201402L -+ -+#define TAOCPP_USE_STD_INTEGER_SEQUENCE -+ -+#if defined( _LIBCPP_VERSION ) -+#define TAOCPP_USE_STD_MAKE_INTEGER_SEQUENCE -+#elif defined( _GLIBCXX_RELEASE ) && ( _GLIBCXX_RELEASE >= 8 ) -+#define TAOCPP_USE_STD_MAKE_INTEGER_SEQUENCE -+#elif defined( _MSC_VER ) && ( _MSC_VER >= 190023918 ) -+#define TAOCPP_USE_STD_MAKE_INTEGER_SEQUENCE -+#endif -+ -+#endif // __cplusplus >= 201402L -+ -+#if defined( __cpp_fold_expressions ) -+#define TAOCPP_FOLD_EXPRESSIONS -+#endif -+ -+#endif // TAOCPP_SEQUENCES_INCLUDE_CONFIG_HPP -diff -up chromium-62.0.3202.62/third_party/tao/seq/exclusive_scan.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/exclusive_scan.hpp ---- chromium-62.0.3202.62/third_party/tao/seq/exclusive_scan.hpp.epel7-c++11 2017-10-25 10:08:42.429573811 -0400 -+++ chromium-62.0.3202.62/third_party/tao/seq/exclusive_scan.hpp 2017-10-25 10:05:28.328204354 -0400 -@@ -0,0 +1,45 @@ -+// Copyright (c) 2015-2017 Daniel Frey -+// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ -+ -+#ifndef TAOCPP_SEQUENCES_INCLUDE_EXCLUSIVE_SCAN_HPP -+#define TAOCPP_SEQUENCES_INCLUDE_EXCLUSIVE_SCAN_HPP -+ -+#include -+ -+#include "make_integer_sequence.hpp" -+#include "partial_sum.hpp" -+ -+namespace tao -+{ -+ namespace seq -+ { -+ namespace impl -+ { -+ template< typename S, typename = make_index_sequence< S::size() > > -+ struct exclusive_scan; -+ -+ template< typename S, std::size_t... Is > -+ struct exclusive_scan< S, index_sequence< Is... > > -+ { -+ using type = integer_sequence< typename S::value_type, partial_sum< Is, S >::value... >; -+ }; -+ } -+ -+ template< typename T, T... Ns > -+ struct exclusive_scan -+ : impl::exclusive_scan< integer_sequence< T, Ns... > > -+ { -+ }; -+ -+ template< typename T, T... Ns > -+ struct exclusive_scan< integer_sequence< T, Ns... > > -+ : impl::exclusive_scan< integer_sequence< T, Ns... > > -+ { -+ }; -+ -+ template< typename T, T... Ns > -+ using exclusive_scan_t = typename exclusive_scan< T, Ns... >::type; -+ } -+} -+ -+#endif // TAOCPP_SEQUENCES_INCLUDE_EXCLUSIVE_SCAN_HPP -diff -up chromium-62.0.3202.62/third_party/tao/seq/fold.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/fold.hpp ---- chromium-62.0.3202.62/third_party/tao/seq/fold.hpp.epel7-c++11 2017-10-25 10:08:42.430573782 -0400 -+++ chromium-62.0.3202.62/third_party/tao/seq/fold.hpp 2017-10-25 10:05:28.328204354 -0400 -@@ -0,0 +1,58 @@ -+// Copyright (c) 2015-2017 Daniel Frey -+// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ -+ -+#ifndef TAOCPP_SEQUENCES_INCLUDE_FOLD_HPP -+#define TAOCPP_SEQUENCES_INCLUDE_FOLD_HPP -+ -+#include -+ -+#include "integer_sequence.hpp" -+#include "make_integer_sequence.hpp" -+#include "select.hpp" -+ -+namespace tao -+{ -+ namespace seq -+ { -+ namespace impl -+ { -+ template< template< typename U, U, U > class, typename, bool, typename T, T... > -+ struct folder; -+ -+ template< template< typename U, U, U > class OP, std::size_t... Is, typename T, T... Ns > -+ struct folder< OP, index_sequence< Is... >, false, T, Ns... > -+ { -+ using type = integer_sequence< T, OP< T, seq::select< 2 * Is, T, Ns... >::value, seq::select< 2 * Is + 1, T, Ns... >::value >::value... >; -+ }; -+ -+ template< template< typename U, U, U > class OP, std::size_t... Is, typename T, T N, T... Ns > -+ struct folder< OP, index_sequence< Is... >, true, T, N, Ns... > -+ { -+ using type = integer_sequence< T, N, OP< T, seq::select< 2 * Is, T, Ns... >::value, seq::select< 2 * Is + 1, T, Ns... >::value >::value... >; -+ }; -+ } -+ -+ template< template< typename U, U, U > class, typename T, T... > -+ struct fold; -+ -+ template< template< typename U, U, U > class OP, typename T, T N > -+ struct fold< OP, T, N > -+ : std::integral_constant< T, N > -+ { -+ }; -+ -+ template< template< typename U, U, U > class OP, typename T, T... Ns > -+ struct fold -+ : fold< OP, typename impl::folder< OP, make_index_sequence< sizeof...( Ns ) / 2 >, sizeof...( Ns ) % 2 == 1, T, Ns... >::type > -+ { -+ }; -+ -+ template< template< typename U, U, U > class OP, typename T, T... Ns > -+ struct fold< OP, integer_sequence< T, Ns... > > -+ : fold< OP, T, Ns... > -+ { -+ }; -+ } -+} -+ -+#endif // TAOCPP_SEQUENCES_INCLUDE_FOLD_HPP -diff -up chromium-62.0.3202.62/third_party/tao/seq/head.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/head.hpp ---- chromium-62.0.3202.62/third_party/tao/seq/head.hpp.epel7-c++11 2017-10-25 10:08:42.431573753 -0400 -+++ chromium-62.0.3202.62/third_party/tao/seq/head.hpp 2017-10-25 10:05:28.328204354 -0400 -@@ -0,0 +1,32 @@ -+// Copyright (c) 2015-2017 Daniel Frey -+// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ -+ -+#ifndef TAOCPP_SEQUENCES_INCLUDE_HEAD_HPP -+#define TAOCPP_SEQUENCES_INCLUDE_HEAD_HPP -+ -+#include -+ -+#include "integer_sequence.hpp" -+ -+namespace tao -+{ -+ namespace seq -+ { -+ template< typename T, T... Ns > -+ struct head; -+ -+ template< typename T, T N, T... Ns > -+ struct head< T, N, Ns... > -+ : std::integral_constant< T, N > -+ { -+ }; -+ -+ template< typename T, T... Ns > -+ struct head< integer_sequence< T, Ns... > > -+ : head< T, Ns... > -+ { -+ }; -+ } -+} -+ -+#endif // TAOCPP_SEQUENCES_INCLUDE_HEAD_HPP -diff -up chromium-62.0.3202.62/third_party/tao/seq/inclusive_scan.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/inclusive_scan.hpp ---- chromium-62.0.3202.62/third_party/tao/seq/inclusive_scan.hpp.epel7-c++11 2017-10-25 10:08:42.432573724 -0400 -+++ chromium-62.0.3202.62/third_party/tao/seq/inclusive_scan.hpp 2017-10-25 10:05:28.328204354 -0400 -@@ -0,0 +1,34 @@ -+// Copyright (c) 2015-2017 Daniel Frey -+// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ -+ -+#ifndef TAOCPP_SEQUENCES_INCLUDE_INCLUSIVE_SCAN_HPP -+#define TAOCPP_SEQUENCES_INCLUDE_INCLUSIVE_SCAN_HPP -+ -+#include -+ -+#include "exclusive_scan.hpp" -+#include "integer_sequence.hpp" -+#include "plus.hpp" -+ -+namespace tao -+{ -+ namespace seq -+ { -+ template< typename T, T... Ns > -+ struct inclusive_scan -+ : plus< exclusive_scan_t< T, Ns... >, integer_sequence< T, Ns... > > -+ { -+ }; -+ -+ template< typename T, T... Ns > -+ struct inclusive_scan< integer_sequence< T, Ns... > > -+ : plus< exclusive_scan_t< integer_sequence< T, Ns... > >, integer_sequence< T, Ns... > > -+ { -+ }; -+ -+ template< typename T, T... Ns > -+ using inclusive_scan_t = typename inclusive_scan< T, Ns... >::type; -+ } -+} -+ -+#endif // TAOCPP_SEQUENCES_INCLUDE_INCLUSIVE_SCAN_HPP -diff -up chromium-62.0.3202.62/third_party/tao/seq/integer_sequence.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/integer_sequence.hpp ---- chromium-62.0.3202.62/third_party/tao/seq/integer_sequence.hpp.epel7-c++11 2017-10-25 10:08:42.433573695 -0400 -+++ chromium-62.0.3202.62/third_party/tao/seq/integer_sequence.hpp 2017-10-25 10:05:28.328204354 -0400 -@@ -0,0 +1,42 @@ -+// Copyright (c) 2015-2017 Daniel Frey -+// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ -+ -+#ifndef TAOCPP_SEQUENCES_INCLUDE_INTEGER_SEQUENCE_HPP -+#define TAOCPP_SEQUENCES_INCLUDE_INTEGER_SEQUENCE_HPP -+ -+#include -+#include -+ -+#include "config.hpp" -+ -+namespace tao -+{ -+ namespace seq -+ { -+ -+#ifdef TAOCPP_USE_STD_INTEGER_SEQUENCE -+ -+ using std::integer_sequence; -+ using std::index_sequence; -+ -+#else -+ -+ template< typename T, T... Ns > -+ struct integer_sequence -+ { -+ using value_type = T; -+ -+ static constexpr std::size_t size() noexcept -+ { -+ return sizeof...( Ns ); -+ } -+ }; -+ -+ template< std::size_t... Ns > -+ using index_sequence = integer_sequence< std::size_t, Ns... >; -+ -+#endif -+ } -+} -+ -+#endif // TAOCPP_SEQUENCES_INCLUDE_INTEGER_SEQUENCE_HPP -diff -up chromium-62.0.3202.62/third_party/tao/seq/is_all.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/is_all.hpp ---- chromium-62.0.3202.62/third_party/tao/seq/is_all.hpp.epel7-c++11 2017-10-25 10:08:42.433573695 -0400 -+++ chromium-62.0.3202.62/third_party/tao/seq/is_all.hpp 2017-10-25 10:05:28.328204354 -0400 -@@ -0,0 +1,34 @@ -+// Copyright (c) 2015-2017 Daniel Frey -+// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ -+ -+#ifndef TAOCPP_SEQUENCES_INCLUDE_IS_ALL_HPP -+#define TAOCPP_SEQUENCES_INCLUDE_IS_ALL_HPP -+ -+#include "config.hpp" -+ -+#ifndef TAOCPP_FOLD_EXPRESSIONS -+#include "integer_sequence.hpp" -+#endif -+ -+#include -+ -+namespace tao -+{ -+ namespace seq -+ { -+ -+#ifdef TAOCPP_FOLD_EXPRESSIONS -+ -+ template< bool... Bs > -+ using is_all = std::integral_constant< bool, ( Bs && ... ) >; -+ -+#else -+ -+ template< bool... Bs > -+ using is_all = std::integral_constant< bool, std::is_same< integer_sequence< bool, true, Bs... >, integer_sequence< bool, Bs..., true > >::value >; -+ -+#endif -+ } -+} -+ -+#endif // TAOCPP_SEQUENCES_INCLUDE_IS_ALL_HPP -diff -up chromium-62.0.3202.62/third_party/tao/seq/is_any.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/is_any.hpp ---- chromium-62.0.3202.62/third_party/tao/seq/is_any.hpp.epel7-c++11 2017-10-25 10:08:42.434573666 -0400 -+++ chromium-62.0.3202.62/third_party/tao/seq/is_any.hpp 2017-10-25 10:05:28.328204354 -0400 -@@ -0,0 +1,34 @@ -+// Copyright (c) 2015-2017 Daniel Frey -+// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ -+ -+#ifndef TAOCPP_SEQUENCES_INCLUDE_IS_ANY_HPP -+#define TAOCPP_SEQUENCES_INCLUDE_IS_ANY_HPP -+ -+#include "config.hpp" -+ -+#ifndef TAOCPP_FOLD_EXPRESSIONS -+#include "is_all.hpp" -+#endif -+ -+#include -+ -+namespace tao -+{ -+ namespace seq -+ { -+ -+#ifdef TAOCPP_FOLD_EXPRESSIONS -+ -+ template< bool... Bs > -+ using is_any = std::integral_constant< bool, ( Bs || ... ) >; -+ -+#else -+ -+ template< bool... Bs > -+ using is_any = std::integral_constant< bool, !is_all< !Bs... >::value >; -+ -+#endif -+ } -+} -+ -+#endif // TAOCPP_SEQUENCES_INCLUDE_IS_ANY_HPP -diff -up chromium-62.0.3202.62/third_party/tao/seq/LICENSE.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/LICENSE ---- chromium-62.0.3202.62/third_party/tao/seq/LICENSE.epel7-c++11 2017-10-25 10:08:42.435573638 -0400 -+++ chromium-62.0.3202.62/third_party/tao/seq/LICENSE 2017-10-25 10:05:28.327204383 -0400 -@@ -0,0 +1,22 @@ -+The MIT License (MIT) -+ -+Copyright (c) 2015-2017 Daniel Frey -+ -+Permission is hereby granted, free of charge, to any person obtaining a copy -+of this software and associated documentation files (the "Software"), to deal -+in the Software without restriction, including without limitation the rights -+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -+copies of the Software, and to permit persons to whom the Software is -+furnished to do so, subject to the following conditions: -+ -+The above copyright notice and this permission notice shall be included in all -+copies or substantial portions of the Software. -+ -+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -+SOFTWARE. -+ -diff -up chromium-62.0.3202.62/third_party/tao/seq/make_integer_range.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/make_integer_range.hpp ---- chromium-62.0.3202.62/third_party/tao/seq/make_integer_range.hpp.epel7-c++11 2017-10-25 10:08:42.435573638 -0400 -+++ chromium-62.0.3202.62/third_party/tao/seq/make_integer_range.hpp 2017-10-25 10:05:28.328204354 -0400 -@@ -0,0 +1,39 @@ -+// Copyright (c) 2015-2017 Daniel Frey -+// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ -+ -+#ifndef TAOCPP_SEQUENCES_INCLUDE_MAKE_INTEGER_RANGE_HPP -+#define TAOCPP_SEQUENCES_INCLUDE_MAKE_INTEGER_RANGE_HPP -+ -+#include "make_integer_sequence.hpp" -+ -+namespace tao -+{ -+ namespace seq -+ { -+ namespace impl -+ { -+ template< typename T, T Begin, T Steps, bool Increase, T Delta = T( 1 ), typename = make_integer_sequence< T, Steps > > -+ struct generate_range; -+ -+ template< typename T, T B, T S, T D, T... Ns > -+ struct generate_range< T, B, S, true, D, integer_sequence< T, Ns... > > -+ { -+ using type = integer_sequence< T, B + D * Ns... >; -+ }; -+ -+ template< typename T, T B, T S, T D, T... Ns > -+ struct generate_range< T, B, S, false, D, integer_sequence< T, Ns... > > -+ { -+ using type = integer_sequence< T, B - D * Ns... >; -+ }; -+ } -+ -+ template< typename T, T N, T M > -+ using make_integer_range = typename impl::generate_range< T, N, ( N <= M ) ? ( M - N ) : ( N - M ), ( N <= M ) >::type; -+ -+ template< std::size_t N, std::size_t M > -+ using make_index_range = make_integer_range< std::size_t, N, M >; -+ } -+} -+ -+#endif // TAOCPP_SEQUENCES_INCLUDE_MAKE_INTEGER_RANGE_HPP -diff -up chromium-62.0.3202.62/third_party/tao/seq/make_integer_sequence.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/make_integer_sequence.hpp ---- chromium-62.0.3202.62/third_party/tao/seq/make_integer_sequence.hpp.epel7-c++11 2017-10-25 10:08:42.436573608 -0400 -+++ chromium-62.0.3202.62/third_party/tao/seq/make_integer_sequence.hpp 2017-10-25 10:05:28.328204354 -0400 -@@ -0,0 +1,87 @@ -+// Copyright (c) 2015-2017 Daniel Frey -+// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ -+ -+#ifndef TAOCPP_SEQUENCES_INCLUDE_MAKE_INTEGER_SEQUENCE_HPP -+#define TAOCPP_SEQUENCES_INCLUDE_MAKE_INTEGER_SEQUENCE_HPP -+ -+#include -+#include -+#include -+ -+#include "config.hpp" -+#include "integer_sequence.hpp" -+ -+namespace tao -+{ -+ namespace seq -+ { -+ -+#ifdef TAOCPP_USE_STD_MAKE_INTEGER_SEQUENCE -+ -+ using std::make_integer_sequence; -+ using std::make_index_sequence; -+ using std::index_sequence_for; -+ -+#else -+ -+ namespace impl -+ { -+ // we have four instantiations of generate_sequence<>, independent of T or N. -+ // V is the current bit, E is the end marker - if true, this is the last step. -+ template< bool V, bool E > -+ struct generate_sequence; -+ -+ // last step: generate final integer sequence -+ template<> -+ struct generate_sequence< false, true > -+ { -+ template< typename T, T M, T N, std::size_t S, T... Ns > -+ using f = integer_sequence< T, Ns... >; -+ }; -+ -+ template<> -+ struct generate_sequence< true, true > -+ { -+ template< typename T, T M, T N, std::size_t S, T... Ns > -+ using f = integer_sequence< T, Ns..., S >; -+ }; -+ -+ // intermediate step: double existing values, append one more if V is set. -+ template<> -+ struct generate_sequence< false, false > -+ { -+ template< typename T, T M, T N, std::size_t S, T... Ns > -+ using f = typename generate_sequence< ( N & ( M / 2 ) ) != 0, ( M / 2 ) == 0 >::template f< T, M / 2, N, 2 * S, Ns..., ( Ns + S )... >; -+ }; -+ -+ template<> -+ struct generate_sequence< true, false > -+ { -+ template< typename T, T M, T N, std::size_t S, T... Ns > -+ using f = typename generate_sequence< ( N & ( M / 2 ) ) != 0, ( M / 2 ) == 0 >::template f< T, M / 2, N, 2 * S + 1, Ns..., ( Ns + S )..., 2 * S >; -+ }; -+ -+ // the final sequence per T/N should be memoized, it will probably be used multiple times. -+ // also checks the limit and starts the above generator properly. -+ template< typename T, T N > -+ struct memoize_sequence -+ { -+ static_assert( N < T( 1 << 20 ), "N too large" ); -+ using type = typename generate_sequence< false, false >::template f< T, ( N < T( 1 << 1 ) ) ? T( 1 << 1 ) : ( N < T( 1 << 2 ) ) ? T( 1 << 2 ) : ( N < T( 1 << 3 ) ) ? T( 1 << 3 ) : ( N < T( 1 << 4 ) ) ? T( 1 << 4 ) : ( N < T( 1 << 5 ) ) ? T( 1 << 5 ) : ( N < T( 1 << 6 ) ) ? T( 1 << 6 ) : ( N < T( 1 << 7 ) ) ? T( 1 << 7 ) : ( N < T( 1 << 8 ) ) ? T( 1 << 8 ) : ( N < T( 1 << 9 ) ) ? T( 1 << 9 ) : ( N < T( 1 << 10 ) ) ? T( 1 << 10 ) : T( 1 << 20 ), N, 0 >; -+ }; -+ } -+ -+ template< typename T, T N > -+ using make_integer_sequence = typename impl::memoize_sequence< T, N >::type; -+ -+ template< std::size_t N > -+ using make_index_sequence = make_integer_sequence< std::size_t, N >; -+ -+ template< typename... Ts > -+ using index_sequence_for = make_index_sequence< sizeof...( Ts ) >; -+ -+#endif -+ } -+} -+ -+#endif // TAOCPP_SEQUENCES_INCLUDE_MAKE_INTEGER_SEQUENCE_HPP -diff -up chromium-62.0.3202.62/third_party/tao/seq/map.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/map.hpp ---- chromium-62.0.3202.62/third_party/tao/seq/map.hpp.epel7-c++11 2017-10-25 10:08:42.437573579 -0400 -+++ chromium-62.0.3202.62/third_party/tao/seq/map.hpp 2017-10-25 10:05:28.328204354 -0400 -@@ -0,0 +1,31 @@ -+// Copyright (c) 2015-2017 Daniel Frey -+// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ -+ -+#ifndef TAOCPP_SEQUENCES_INCLUDE_MAP_HPP -+#define TAOCPP_SEQUENCES_INCLUDE_MAP_HPP -+ -+#include -+#include -+ -+#include "integer_sequence.hpp" -+#include "select.hpp" -+ -+namespace tao -+{ -+ namespace seq -+ { -+ template< typename, typename > -+ struct map; -+ -+ template< std::size_t... Ns, typename M > -+ struct map< index_sequence< Ns... >, M > -+ { -+ using type = integer_sequence< typename M::value_type, select< Ns, M >::value... >; -+ }; -+ -+ template< typename S, typename M > -+ using map_t = typename map< S, M >::type; -+ } -+} -+ -+#endif // TAOCPP_SEQUENCES_INCLUDE_MAP_HPP -diff -up chromium-62.0.3202.62/third_party/tao/seq/max.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/max.hpp ---- chromium-62.0.3202.62/third_party/tao/seq/max.hpp.epel7-c++11 2017-10-25 10:08:42.437573579 -0400 -+++ chromium-62.0.3202.62/third_party/tao/seq/max.hpp 2017-10-25 10:05:28.328204354 -0400 -@@ -0,0 +1,35 @@ -+// Copyright (c) 2015-2017 Daniel Frey -+// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ -+ -+#ifndef TAOCPP_SEQUENCES_INCLUDE_MAX_HPP -+#define TAOCPP_SEQUENCES_INCLUDE_MAX_HPP -+ -+#include "fold.hpp" -+ -+#include -+ -+namespace tao -+{ -+ namespace seq -+ { -+ namespace impl -+ { -+ template< typename T, T A, T B > -+ using max = std::integral_constant< T, ( ( A > B ) ? A : B ) >; -+ } -+ -+ template< typename T, T... Ns > -+ struct max -+ : fold< impl::max, T, Ns... > -+ { -+ }; -+ -+ template< typename T, T... Ns > -+ struct max< integer_sequence< T, Ns... > > -+ : max< T, Ns... > -+ { -+ }; -+ } -+} -+ -+#endif // TAOCPP_SEQUENCES_INCLUDE_MAX_HPP -diff -up chromium-62.0.3202.62/third_party/tao/seq/min.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/min.hpp ---- chromium-62.0.3202.62/third_party/tao/seq/min.hpp.epel7-c++11 2017-10-25 10:08:42.438573550 -0400 -+++ chromium-62.0.3202.62/third_party/tao/seq/min.hpp 2017-10-25 10:05:28.328204354 -0400 -@@ -0,0 +1,35 @@ -+// Copyright (c) 2015-2017 Daniel Frey -+// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ -+ -+#ifndef TAOCPP_SEQUENCES_INCLUDE_MIN_HPP -+#define TAOCPP_SEQUENCES_INCLUDE_MIN_HPP -+ -+#include "fold.hpp" -+ -+#include -+ -+namespace tao -+{ -+ namespace seq -+ { -+ namespace impl -+ { -+ template< typename T, T A, T B > -+ using min = std::integral_constant< T, ( ( A < B ) ? A : B ) >; -+ } -+ -+ template< typename T, T... Ns > -+ struct min -+ : fold< impl::min, T, Ns... > -+ { -+ }; -+ -+ template< typename T, T... Ns > -+ struct min< integer_sequence< T, Ns... > > -+ : min< T, Ns... > -+ { -+ }; -+ } -+} -+ -+#endif // TAOCPP_SEQUENCES_INCLUDE_MIN_HPP -diff -up chromium-62.0.3202.62/third_party/tao/seq/minus.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/minus.hpp ---- chromium-62.0.3202.62/third_party/tao/seq/minus.hpp.epel7-c++11 2017-10-25 10:08:42.438573550 -0400 -+++ chromium-62.0.3202.62/third_party/tao/seq/minus.hpp 2017-10-25 10:05:28.328204354 -0400 -@@ -0,0 +1,29 @@ -+// Copyright (c) 2015-2017 Daniel Frey -+// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ -+ -+#ifndef TAOCPP_SEQUENCES_INCLUDE_MINUS_HPP -+#define TAOCPP_SEQUENCES_INCLUDE_MINUS_HPP -+ -+#include -+ -+#include "zip.hpp" -+ -+namespace tao -+{ -+ namespace seq -+ { -+ namespace impl -+ { -+ template< typename T, T A, T B > -+ using minus = std::integral_constant< T, A - B >; -+ } -+ -+ template< typename A, typename B > -+ using minus = zip< impl::minus, A, B >; -+ -+ template< typename A, typename B > -+ using minus_t = typename minus< A, B >::type; -+ } -+} -+ -+#endif // TAOCPP_SEQUENCES_INCLUDE_MINUS_HPP -diff -up chromium-62.0.3202.62/third_party/tao/seq/partial_sum.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/partial_sum.hpp ---- chromium-62.0.3202.62/third_party/tao/seq/partial_sum.hpp.epel7-c++11 2017-10-25 10:08:42.439573522 -0400 -+++ chromium-62.0.3202.62/third_party/tao/seq/partial_sum.hpp 2017-10-25 10:05:28.328204354 -0400 -@@ -0,0 +1,44 @@ -+// Copyright (c) 2015-2017 Daniel Frey -+// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ -+ -+#ifndef TAOCPP_SEQUENCES_INCLUDE_PARTIAL_SUM_HPP -+#define TAOCPP_SEQUENCES_INCLUDE_PARTIAL_SUM_HPP -+ -+#include -+#include -+ -+#include "make_integer_sequence.hpp" -+#include "sum.hpp" -+ -+namespace tao -+{ -+ namespace seq -+ { -+ namespace impl -+ { -+ template< std::size_t, typename S, typename = make_index_sequence< S::size() > > -+ struct partial_sum; -+ -+ template< std::size_t I, typename T, T... Ns, std::size_t... Is > -+ struct partial_sum< I, integer_sequence< T, Ns... >, index_sequence< Is... > > -+ : seq::sum< T, ( ( Is < I ) ? Ns : 0 )... > -+ { -+ static_assert( I <= sizeof...( Is ), "tao::seq::partial_sum: I is out of range" ); -+ }; -+ } -+ -+ template< std::size_t I, typename T, T... Ns > -+ struct partial_sum -+ : impl::partial_sum< I, integer_sequence< T, Ns... > > -+ { -+ }; -+ -+ template< std::size_t I, typename T, T... Ns > -+ struct partial_sum< I, integer_sequence< T, Ns... > > -+ : impl::partial_sum< I, integer_sequence< T, Ns... > > -+ { -+ }; -+ } -+} -+ -+#endif // TAOCPP_SEQUENCES_INCLUDE_PARTIAL_SUM_HPP -diff -up chromium-62.0.3202.62/third_party/tao/seq/plus.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/plus.hpp ---- chromium-62.0.3202.62/third_party/tao/seq/plus.hpp.epel7-c++11 2017-10-25 10:08:42.439573522 -0400 -+++ chromium-62.0.3202.62/third_party/tao/seq/plus.hpp 2017-10-25 10:05:28.328204354 -0400 -@@ -0,0 +1,29 @@ -+// Copyright (c) 2015-2017 Daniel Frey -+// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ -+ -+#ifndef TAOCPP_SEQUENCES_INCLUDE_PLUS_HPP -+#define TAOCPP_SEQUENCES_INCLUDE_PLUS_HPP -+ -+#include -+ -+#include "zip.hpp" -+ -+namespace tao -+{ -+ namespace seq -+ { -+ namespace impl -+ { -+ template< typename T, T A, T B > -+ using plus = std::integral_constant< T, A + B >; -+ } -+ -+ template< typename A, typename B > -+ using plus = zip< impl::plus, A, B >; -+ -+ template< typename A, typename B > -+ using plus_t = typename plus< A, B >::type; -+ } -+} -+ -+#endif // TAOCPP_SEQUENCES_INCLUDE_PLUS_HPP -diff -up chromium-62.0.3202.62/third_party/tao/seq/README.chromium.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/README.chromium ---- chromium-62.0.3202.62/third_party/tao/seq/README.chromium.epel7-c++11 2017-10-25 10:08:42.440573492 -0400 -+++ chromium-62.0.3202.62/third_party/tao/seq/README.chromium 2017-10-25 10:08:18.341272571 -0400 -@@ -0,0 +1,15 @@ -+Name: The Art of C++ / Sequences -+Short Name: tao/seq -+URL: https://github.com/taocpp/sequences -+Version: 5fd5378 -+License: MIT -+License File: LICENSE -+Security Critical: No -+ -+Description: -+Source archive: -+ https://github.com/taocpp/sequences -+ -+The Art of C++ / Sequences is a zero-dependency C++11 header-only library that provides efficient -+algorithms to generate and work on variadic templates and std::integer_sequence. -+We use it to support gcc 4.8. -diff -up chromium-62.0.3202.62/third_party/tao/seq/README.md.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/README.md ---- chromium-62.0.3202.62/third_party/tao/seq/README.md.epel7-c++11 2017-10-25 10:08:42.441573463 -0400 -+++ chromium-62.0.3202.62/third_party/tao/seq/README.md 2017-10-25 10:05:28.327204383 -0400 -@@ -0,0 +1,282 @@ -+# The Art of C++ / Sequences -+ -+[![Release](https://img.shields.io/github/release/taocpp/sequences.svg)](https://github.com/taocpp/sequences/releases/latest) -+[![TravisCI](https://travis-ci.org/taocpp/sequences.svg)](https://travis-ci.org/taocpp/sequences) -+[![AppVeyor](https://ci.appveyor.com/api/projects/status/github/taocpp/sequences?svg=true)](https://ci.appveyor.com/project/taocpp/sequences) -+ -+The Art of C++ / Sequences is a zero-dependency C++11 header-only library that provides efficient algorithms to generate and work on variadic templates and [`std::integer_sequence`](http://en.cppreference.com/w/cpp/utility/integer_sequence). -+ -+## Compatibility -+ -+* Requires C++11 or newer. -+* Tested with GCC 4.8+, Clang 3.4+, Xcode 6+ and Visual Studio 2017. -+ -+The following compilers have bugs which prevent our code from compiling: -+ -+* Clang 4.0. -+* Xcode 7 and 8 when used with C++14 or higher. -+* Visual Studio 2015. -+ -+(If you know how to fix those, please let us know) -+ -+Part of the library might still work, e.g. Clang 4.0 only has problems with `zip` and `fold` (and everything based on it). -+ -+## Provided algorithms and examples -+ -+* All provided templates are in the nested namespace `tao::seq`. -+* All templates don't use C++14 features, therefore being compatible with C++11. Sometimes, C++14/C++17 features are used conditionally, taking advantage of newer language features when available but providing C++11-compatible implementations otherwise. -+* All templates use `tao::seq::integer_sequence`, etc. internally, therefore being compatible with C++11. -+* All templates use `tao::seq::make_integer_sequence`, etc. internally, therefore using the most scalable solution available. -+ -+#### Header `tao/seq/integer_sequence.hpp` -+ -+Provides: -+ -+* `integer_sequence< typename T, T N >` -+* `index_sequence< std::size_t N >` -+ -+Notes: -+ -+* When available (C++14 or newer), the above are type-aliases for `std::integer_sequence` and `std::index_sequence`. -+ -+#### Header `tao/seq/make_integer_sequence.hpp` -+ -+Efficient versions of sequence generators. -+ -+* `make_integer_sequence< typename T, T N >` -+* `make_index_sequence< std::size_t N >` -+* `index_sequence_for< typename... Ts >` -+ -+Examples: -+ -+* `make_integer_sequence` ➙ `integer_sequence` -+* `make_integer_sequence` ➙ `integer_sequence` -+* `make_integer_sequence` ➙ `integer_sequence` -+* `make_index_sequence<0>` ➙ `index_sequence<>` -+* `make_index_sequence<1>` ➙ `index_sequence<0>` -+* `make_index_sequence<5>` ➙ `index_sequence<0,1,2,3,4>` -+* `index_sequence_for` ➙ `index_sequence<0,1,2>` -+ -+Notes: -+ -+libc++ already has very efficient versions for the above, so they are pulled in with a using-declaration. Only if we don't know if the STL's versions are at least O(log N) we provide our own implementations. -+ -+Our own implementation has O(log N) instantiation depth. This allows for very large sequences without the need to increase the compiler's default instantiation depth limits. For example, GCC and Clang generate `index_sequence<10000>` in ~0.15s (on my machine, of course). The standard library version from libstdc++, when trying to create `index_sequence<5000>` and with its O(N) implementation, requires ~30s, >3GB of RAM and `-ftemplate-depth=5100`. -+ -+#### Header `tao/seq/make_integer_range.hpp` -+ -+Generate half-open ranges of integers. -+ -+* `make_integer_range< typename T, T N, T M >` -+* `make_index_range< std::size_t N, std::size_t M >` -+ -+Examples: -+ -+* `make_integer_range` ➙ `integer_sequence` -+* `make_integer_range` ➙ `integer_sequence` -+* `make_integer_sequence` ➙ `integer_sequence` -+* `make_index_range<5,5>` ➙ `index_sequence<>` -+* `make_index_range<2,5>` ➙ `index_sequence<2,3,4>` -+ -+#### Header `tao/seq/sum.hpp` -+ -+Integral constant to provide the sum of `Ns`. -+ -+* `sum< typename T, T... Ns >` -+* `sum< typename S >` -+ -+Examples: -+ -+* `sum::value` ➙ `9` -+* `sum>::value` ➙ `10` -+ -+#### Header `tao/seq/partial_sum.hpp` -+ -+Integral constant to provide the sum of the first `I` elements of `Ns`. -+ -+* `partial_sum< std::size_t I, typename T, T... Ns >` -+* `partial_sum< std::size_t I, typename S >` -+ -+Examples: -+ -+* `partial_sum<0,int,1,4,3,1>::value` ➙ `0` -+* `partial_sum<2,int,1,4,3,1>::value` ➙ `5` -+* `partial_sum<4,make_index_sequence<5>>::value` ➙ `6` -+ -+#### Header `tao/seq/exclusive_scan.hpp` -+ -+Provides a sequence with the exclusive scan of the input sequence. -+ -+* `exclusive_scan_t< typename T, T... Ns >` -+* `exclusive_scan_t< typename S >` -+ -+Examples: -+ -+* `exclusive_scan_t` ➙ `integer_sequence` -+ -+#### Header `tao/seq/inclusive_scan.hpp` -+ -+Provides a sequence with the inclusive scan of the input sequence. -+ -+* `inclusive_scan_t< typename T, T... Ns >` -+* `inclusive_scan_t< typename S >` -+ -+Examples: -+ -+* `inclusive_scan_t` ➙ `integer_sequence` -+ -+#### Header `tao/seq/zip.hpp` -+ -+Applies a binary operation to elements from two sequences. -+ -+* `zip_t< template< typename U, U, U > class OP, typename L, typename R >` -+ -+Notes: -+ -+Both sequences may have a different element type, the resulting sequence's type is calculated with `std::common_type_t`. -+ -+#### Header `tao/seq/plus.hpp` -+ -+Provides a sequence which is the element-wise sum of its input sequences. -+ -+* `plus_t< typename L, typename R >` -+ -+Notes: -+ -+Both sequences may have a different element type, the resulting sequence's type is calculated with `std::common_type_t`. -+ -+Examples: -+ -+* `using A = index_sequence<1,4,0,3,1>` -+* `using B = make_index_sequence<5>` -+* `plus_t` ➙ `index_sequence<1,5,2,6,5>` -+ -+#### Header `tao/seq/minus.hpp` -+ -+Provides a sequence which is the element-wise sum of its input sequences. -+ -+* `minus_t< typename L, typename R >` -+ -+Notes: -+ -+Both sequences may have a different element type, the resulting sequence's type is calculated with `std::common_type_t`. -+ -+Examples: -+ -+* `using A = integer_sequence` -+* `using B = integer_sequence` -+* `minus_t` ➙ `integer_sequence` -+* `minus_t` ➙ `integer_sequence` -+ -+#### Header `tao/seq/head.hpp` -+ -+Integral constant to provide the first element of a non-empty sequence. -+ -+* `head< typename T, T... >` -+* `head< typename S >` -+ -+#### Header `tao/seq/tail.hpp` -+ -+Removed the first element of a non-empty sequence. -+ -+* `tail_t< typename T, T... >` -+* `tail_t< typename S >` -+ -+#### Header `tao/seq/select.hpp` -+ -+Integral constant to provide the `I`th element of a non-empty sequence. -+ -+* `select< std::size_t I, typename T, T... >` -+* `select< std::size_t I, typename S >` -+ -+#### Header `tao/seq/concatenate.hpp` -+ -+Concatenate the values. -+ -+* `concatenate_t< typename T, typename U >` -+ -+Notes: -+ -+Both sequences may have a different element type, the resulting sequence's type is calculated with `std::common_type_t`. -+ -+#### Header `tao/seq/fold.hpp` -+ -+Integral constant calculated by "folding" a sequence of values with a given binary operation. -+ -+* `fold< template< typename U, U, U > class OP, typename T, T... >` -+* `fold< template< typename U, U, U > class OP, typename S >` -+ -+#### Header `tao/seq/min.hpp` -+ -+Integral constant to provide the minimum value. -+ -+* `min< typename T, T... >` -+* `min< typename S >` -+ -+Notes: -+ -+Implemented with `fold` like this: -+ -+ namespace impl -+ { -+ template< typename T, T A, T B > -+ using min = std::integral_constant< T, ( ( A < B ) ? A : B ) >; -+ } -+ -+ template< typename T, T... Ns > -+ using min = fold< impl::min, T, Ns... >; -+ -+#### Header `tao/seq/max.hpp` -+ -+Integral constant to provide the maximum value. -+ -+* `max< typename T, T... >` -+* `max< typename S >` -+ -+#### Header `tao/seq/map.hpp` -+ -+Map a sequence of indices to a sequence of values. -+ -+* `map_t< typename I, typename M >` -+ -+Examples: -+ -+* `using I = index_sequence<1,0,3,2,1,1,3>` -+* `using M = integer_sequence` -+* `map_t` ➙ `integer_sequence` -+ -+#### Header `tao/seq/is_all.hpp` -+ -+Integral constant which is true if all boolean parameters are true (logical and). -+ -+* `is_all< bool... >` -+ -+Examples: -+ -+* `is_all::value` ➙ `true` -+* `is_all::value` ➙ `false` -+* `is_all<>::value` ➙ `true` -+ -+#### Header `tao/seq/is_any.hpp` -+ -+Integral constant which is true if any boolean parameter is true (logical or). -+ -+* `is_any< bool... >` -+ -+Examples: -+ -+* `is_any::value` ➙ `true` -+* `is_any::value` ➙ `false` -+* `is_any<>::value` ➙ `false` -+ -+## License -+ -+The Art of C++ is certified [Open Source](http://www.opensource.org/docs/definition.html) software. It may be used for any purpose, including commercial purposes, at absolutely no cost. It is distributed under the terms of the [MIT license](http://www.opensource.org/licenses/mit-license.html) reproduced here. -+ -+> Copyright (c) 2015-2017 Daniel Frey -+> -+> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -+> -+> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -+> -+> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -diff -up chromium-62.0.3202.62/third_party/tao/seq/scale.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/scale.hpp ---- chromium-62.0.3202.62/third_party/tao/seq/scale.hpp.epel7-c++11 2017-10-25 10:08:42.441573463 -0400 -+++ chromium-62.0.3202.62/third_party/tao/seq/scale.hpp 2017-10-25 10:05:28.328204354 -0400 -@@ -0,0 +1,66 @@ -+// Copyright (c) 2015-2017 Daniel Frey -+// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ -+ -+#ifndef TAOCPP_SEQUENCES_INCLUDE_SCALE_HPP -+#define TAOCPP_SEQUENCES_INCLUDE_SCALE_HPP -+ -+#include "integer_sequence.hpp" -+ -+namespace tao -+{ -+ namespace seq -+ { -+ namespace impl -+ { -+ template< typename T > -+ struct is_integer_sequence : std::false_type -+ { -+ }; -+ -+ template< typename T, T... Ns > -+ struct is_integer_sequence< integer_sequence< T, Ns... > > : std::true_type -+ { -+ }; -+ -+ template< typename T > -+ struct element_type -+ { -+ using type = T; -+ }; -+ -+ template< typename T, T... Ns > -+ struct element_type< integer_sequence< T, Ns... > > -+ { -+ using type = T; -+ }; -+ -+ template< bool, typename > -+ struct scale -+ { -+ template< typename T, T S, T... Ns > -+ struct impl -+ { -+ using type = integer_sequence< T, S * Ns... >; -+ }; -+ }; -+ -+ template< typename T, T... Ns > -+ struct scale< true, integer_sequence< T, Ns... > > -+ { -+ template< typename, T S > -+ struct impl -+ { -+ using type = integer_sequence< T, S * Ns... >; -+ }; -+ }; -+ } -+ -+ template< typename T, typename impl::element_type< T >::type S, typename impl::element_type< T >::type... Ns > -+ using scale = typename impl::scale< impl::is_integer_sequence< T >::value, T >::template impl< T, S, Ns... >; -+ -+ template< typename T, typename impl::element_type< T >::type S, typename impl::element_type< T >::type... Ns > -+ using scale_t = typename scale< T, S, Ns... >::type; -+ } -+} -+ -+#endif // TAOCPP_SEQUENCES_INCLUDE_SCALE_HPP -diff -up chromium-62.0.3202.62/third_party/tao/seq/select.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/select.hpp ---- chromium-62.0.3202.62/third_party/tao/seq/select.hpp.epel7-c++11 2017-10-25 10:08:42.442573435 -0400 -+++ chromium-62.0.3202.62/third_party/tao/seq/select.hpp 2017-10-25 10:05:28.328204354 -0400 -@@ -0,0 +1,31 @@ -+// Copyright (c) 2015-2017 Daniel Frey -+// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ -+ -+#ifndef TAOCPP_SEQUENCES_INCLUDE_SELECT_HPP -+#define TAOCPP_SEQUENCES_INCLUDE_SELECT_HPP -+ -+#include -+#include -+ -+#include "at_index.hpp" -+#include "integer_sequence.hpp" -+ -+namespace tao -+{ -+ namespace seq -+ { -+ template< std::size_t I, typename T, T... Ns > -+ struct select -+ : at_index_t< I, std::integral_constant< T, Ns >... > -+ { -+ }; -+ -+ template< std::size_t I, typename T, T... Ns > -+ struct select< I, integer_sequence< T, Ns... > > -+ : select< I, T, Ns... > -+ { -+ }; -+ } -+} -+ -+#endif // TAOCPP_SEQUENCES_INCLUDE_SELECT_HPP -diff -up chromium-62.0.3202.62/third_party/tao/seq/sum.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/sum.hpp ---- chromium-62.0.3202.62/third_party/tao/seq/sum.hpp.epel7-c++11 2017-10-25 10:08:42.443573405 -0400 -+++ chromium-62.0.3202.62/third_party/tao/seq/sum.hpp 2017-10-25 10:05:28.328204354 -0400 -@@ -0,0 +1,79 @@ -+// Copyright (c) 2015-2017 Daniel Frey -+// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ -+ -+#ifndef TAOCPP_SEQUENCES_INCLUDE_SUM_HPP -+#define TAOCPP_SEQUENCES_INCLUDE_SUM_HPP -+ -+#include -+#include -+ -+#include "config.hpp" -+#include "integer_sequence.hpp" -+ -+#ifndef TAOCPP_FOLD_EXPRESSIONS -+#include "make_integer_sequence.hpp" -+#include -+#endif -+ -+namespace tao -+{ -+ namespace seq -+ { -+ -+#ifdef TAOCPP_FOLD_EXPRESSIONS -+ -+ template< typename T, T... Ns > -+ struct sum -+ : std::integral_constant< T, ( Ns + ... + T( 0 ) ) > -+ { -+ }; -+ -+#else -+ -+ namespace impl -+ { -+ template< std::size_t, std::size_t N > -+ struct chars -+ { -+ char dummy[ N + 1 ]; -+ }; -+ -+ template< typename, std::size_t... > -+ struct collector; -+ -+ template< std::size_t... Is, std::size_t... Ns > -+ struct collector< index_sequence< Is... >, Ns... > -+ : chars< Is, Ns >... -+ { -+ }; -+ -+ template< bool, std::size_t N, typename T, T... Ns > -+ struct sum -+ { -+ using type = std::integral_constant< T, T( sizeof( collector< make_index_sequence< N >, ( ( Ns > 0 ) ? Ns : 0 )... > ) - N ) - T( sizeof( collector< make_index_sequence< N >, ( ( Ns < 0 ) ? -Ns : 0 )... > ) - N ) >; -+ }; -+ -+ template< std::size_t N, typename T, T... Ns > -+ struct sum< true, N, T, Ns... > -+ { -+ using type = std::integral_constant< T, T( sizeof( collector< make_index_sequence< N >, ( ( Ns > 0 ) ? Ns : 0 )... > ) - N ) >; -+ }; -+ } -+ -+ template< typename T, T... Ns > -+ struct sum -+ : impl::sum< std::is_unsigned< T >::value, sizeof...( Ns ) + 1, T, Ns..., 0 >::type -+ { -+ }; -+ -+#endif -+ -+ template< typename T, T... Ns > -+ struct sum< integer_sequence< T, Ns... > > -+ : sum< T, Ns... > -+ { -+ }; -+ } -+} -+ -+#endif // TAOCPP_SEQUENCES_INCLUDE_SUM_HPP -diff -up chromium-62.0.3202.62/third_party/tao/seq/tail.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/tail.hpp ---- chromium-62.0.3202.62/third_party/tao/seq/tail.hpp.epel7-c++11 2017-10-25 10:08:42.444573376 -0400 -+++ chromium-62.0.3202.62/third_party/tao/seq/tail.hpp 2017-10-25 10:05:28.329204325 -0400 -@@ -0,0 +1,35 @@ -+// Copyright (c) 2015-2017 Daniel Frey -+// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ -+ -+#ifndef TAOCPP_SEQUENCES_INCLUDE_TAIL_HPP -+#define TAOCPP_SEQUENCES_INCLUDE_TAIL_HPP -+ -+#include -+ -+#include "integer_sequence.hpp" -+ -+namespace tao -+{ -+ namespace seq -+ { -+ template< typename T, T... Ns > -+ struct tail; -+ -+ template< typename T, T N, T... Ns > -+ struct tail< T, N, Ns... > -+ { -+ using type = integer_sequence< T, Ns... >; -+ }; -+ -+ template< typename T, T... Ns > -+ struct tail< integer_sequence< T, Ns... > > -+ : tail< T, Ns... > -+ { -+ }; -+ -+ template< typename T, T... Ns > -+ using tail_t = typename tail< T, Ns... >::type; -+ } -+} -+ -+#endif // TAOCPP_SEQUENCES_INCLUDE_TAIL_HPP -diff -up chromium-62.0.3202.62/third_party/tao/seq/type_by_index.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/type_by_index.hpp ---- chromium-62.0.3202.62/third_party/tao/seq/type_by_index.hpp.epel7-c++11 2017-10-25 10:08:42.445573347 -0400 -+++ chromium-62.0.3202.62/third_party/tao/seq/type_by_index.hpp 2017-10-25 10:05:28.329204325 -0400 -@@ -0,0 +1,57 @@ -+// Copyright (c) 2015-2017 Daniel Frey -+// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ -+ -+#ifndef TAOCPP_SEQUENCES_INCLUDE_TYPE_BY_INDEX_HPP -+#define TAOCPP_SEQUENCES_INCLUDE_TYPE_BY_INDEX_HPP -+ -+#include -+#include -+ -+#include "make_integer_sequence.hpp" -+ -+namespace tao -+{ -+ namespace seq -+ { -+ // based on http://stackoverflow.com/questions/18942322 -+ -+ namespace impl -+ { -+ template< std::size_t > -+ struct any -+ { -+ any( ... ); -+ }; -+ -+ template< typename > -+ struct wrapper; -+ -+ template< typename > -+ struct unwrap; -+ -+ template< typename T > -+ struct unwrap< wrapper< T > > -+ { -+ using type = T; -+ }; -+ -+ template< typename > -+ struct get_nth; -+ -+ template< std::size_t... Is > -+ struct get_nth< index_sequence< Is... > > -+ { -+ template< typename T > -+ static T deduce( any< Is & 0 >..., T*, ... ); -+ }; -+ } -+ -+ template< std::size_t I, typename... Ts > -+ using type_by_index = impl::unwrap< decltype( impl::get_nth< make_index_sequence< I > >::deduce( std::declval< impl::wrapper< Ts >* >()... ) ) >; -+ -+ template< std::size_t I, typename... Ts > -+ using type_by_index_t = typename type_by_index< I, Ts... >::type; -+ } -+} -+ -+#endif // TAOCPP_SEQUENCES_INCLUDE_TYPE_BY_INDEX_HPP -diff -up chromium-62.0.3202.62/third_party/tao/seq/zip.hpp.epel7-c++11 chromium-62.0.3202.62/third_party/tao/seq/zip.hpp ---- chromium-62.0.3202.62/third_party/tao/seq/zip.hpp.epel7-c++11 2017-10-25 10:08:42.446573319 -0400 -+++ chromium-62.0.3202.62/third_party/tao/seq/zip.hpp 2017-10-25 10:05:28.329204325 -0400 -@@ -0,0 +1,30 @@ -+// Copyright (c) 2015-2017 Daniel Frey -+// Please see LICENSE for license or visit https://github.com/taocpp/sequences/ -+ -+#ifndef TAOCPP_SEQUENCES_INCLUDE_ZIP_HPP -+#define TAOCPP_SEQUENCES_INCLUDE_ZIP_HPP -+ -+#include -+ -+#include "integer_sequence.hpp" -+ -+namespace tao -+{ -+ namespace seq -+ { -+ template< template< typename U, U, U > class, typename, typename > -+ struct zip; -+ -+ template< template< typename U, U, U > class OP, typename TA, TA... As, typename TB, TB... Bs > -+ struct zip< OP, integer_sequence< TA, As... >, integer_sequence< TB, Bs... > > -+ { -+ using CT = typename std::common_type< TA, TB >::type; -+ using type = integer_sequence< CT, OP< CT, As, Bs >::value... >; -+ }; -+ -+ template< template< typename U, U, U > class OP, typename A, typename B > -+ using zip_t = typename zip< OP, A, B >::type; -+ } -+} -+ -+#endif // TAOCPP_SEQUENCES_INCLUDE_ZIP_HPP -diff -up chromium-62.0.3202.62/tools/ipc_fuzzer/fuzzer/fuzzer.cc.epel7-c++11 chromium-62.0.3202.62/tools/ipc_fuzzer/fuzzer/fuzzer.cc ---- chromium-62.0.3202.62/tools/ipc_fuzzer/fuzzer/fuzzer.cc.epel7-c++11 2017-10-25 10:18:10.415133815 -0400 -+++ chromium-62.0.3202.62/tools/ipc_fuzzer/fuzzer/fuzzer.cc 2017-10-25 10:18:58.888807178 -0400 -@@ -23,6 +23,7 @@ - #include "tools/ipc_fuzzer/fuzzer/rand_util.h" - #include "tools/ipc_fuzzer/message_lib/message_cracker.h" - #include "tools/ipc_fuzzer/message_lib/message_file.h" -+#include "third_party/tao/seq/integer_sequence.hpp" - - #if defined(OS_POSIX) - #include -@@ -1680,14 +1681,14 @@ class FuzzerHelper, void>; - - static std::unique_ptr Fuzz(IPC::Message* msg, Fuzzer* fuzzer) { -- return FuzzImpl(msg, fuzzer, std::index_sequence_for()); -+ return FuzzImpl(msg, fuzzer, tao::seq::index_sequence_for()); - } - - private: - template - static std::unique_ptr FuzzImpl(IPC::Message* msg, - Fuzzer* fuzzer, -- std::index_sequence) { -+ tao::seq::index_sequence) { - typename Message::Param p; - if (msg) { - Message::Read(static_cast(msg), &p); -@@ -1707,14 +1708,14 @@ class FuzzerHelper< - using Message = IPC::MessageT, std::tuple>; - - static std::unique_ptr Fuzz(IPC::Message* msg, Fuzzer* fuzzer) { -- return FuzzImpl(msg, fuzzer, std::index_sequence_for()); -+ return FuzzImpl(msg, fuzzer, tao::seq::index_sequence_for()); - } - - private: - template - static std::unique_ptr FuzzImpl(IPC::Message* msg, - Fuzzer* fuzzer, -- std::index_sequence) { -+ tao::seq::index_sequence) { - typename Message::SendParam p; - Message* real_msg = static_cast(msg); - std::unique_ptr new_msg; diff --git a/chromium-62.0.3202.62-epel7-noc++14.patch b/chromium-62.0.3202.62-epel7-noc++14.patch deleted file mode 100644 index 6ed714a..0000000 --- a/chromium-62.0.3202.62-epel7-noc++14.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -up chromium-62.0.3202.62/tools/gn/bootstrap/bootstrap.py.epel7-noc++14 chromium-62.0.3202.62/tools/gn/bootstrap/bootstrap.py ---- chromium-62.0.3202.62/tools/gn/bootstrap/bootstrap.py.epel7-noc++14 2017-10-24 22:20:25.881183458 -0400 -+++ chromium-62.0.3202.62/tools/gn/bootstrap/bootstrap.py 2017-10-24 22:20:38.395943374 -0400 -@@ -349,7 +349,7 @@ def write_gn_ninja(path, root_gen_dir, o - '-pipe', - '-fno-exceptions' - ]) -- cflags_cc.extend(['-std=c++14', '-Wno-c++11-narrowing']) -+ cflags_cc.extend(['-std=c++11', '-Wno-c++11-narrowing']) - if is_aix: - cflags.extend(['-maix64']) - ldflags.extend([ '-maix64 -Wl,-bbigtoc' ]) diff --git a/chromium.spec b/chromium.spec index da74cc5..8c2b738 100644 --- a/chromium.spec +++ b/chromium.spec @@ -26,7 +26,7 @@ # Requires is trickier. %global __provides_exclude_from %{chromium_path}/.*\\.so|%{chromium_path}/lib/.*\\.so -%global privlibs libEGL|libGLESv2|libVkLayer_core_validation|libVkLayer_object_tracker|libVkLayer_parameter_validation|libVkLayer_swapchain|libVkLayer_threading|libVkLayer_unique_objects|libaccessibility|libanimation|libaura|libaura_extra|libbase|libbase_i18n|libbindings|libblink_android_mojo_bindings_shared|libblink_common|libblink_controller|libblink_core|libblink_modules|libblink_mojo_bindings_shared|libblink_offscreen_canvas_mojo_bindings_shared|libblink_platform|libbluetooth|libboringssl|libbrowser_ui_views|libcaptive_portal|libcapture_base|libcapture_lib|libcc|libcc_animation|libcc_base|libcc_blink|libcc_debug|libcc_ipc|libcc_paint|libcdm_manager|libchromium_sqlite3|libclearkeycdm|libcloud_policy_proto_generated_compile|libcodec|libcolor_space|libcommon|libcompositor|libcontent|libcontent_common_mojo_bindings_shared|libcontent_public_common_mojo_bindings_shared|libcrcrypto|libdbus|libdevice_base|libdevice_event_log|libdevice_gamepad|libdevice_vr_mojo_bindings|libdevice_vr_mojo_bindings_blink|libdevice_vr_mojo_bindings_shared|libdevices|libdiscardable_memory_client|libdiscardable_memory_common|libdiscardable_memory_service|libdisplay|libdisplay_types|libdisplay_util|libdomain_reliability|libembedder|libevents|libevents_base|libevents_devices_x11|libevents_ozone_layout|libevents_x|libfingerprint|libffmpeg|libgcm|libgeolocation|libgeometry|libgeometry_skia|libgesture_detection|libgfx|libgfx_ipc|libgfx_ipc_color|libgfx_ipc_geometry|libgfx_ipc_skia|libgfx_switches|libgfx_x11|libgin|libgl_in_process_context|libgl_init|libgl_wrapper|libgles2_c_lib|libgles2_implementation|libgles2_utils|libgpu|libgtk3ui|libheadless|libhost|libicui18n|libicuuc|libinterfaces_shared|libipc|libipc_mojom|libipc_mojom_shared|libjs|libkeyboard|libkeyboard_with_content|libkeycodes_x11|libkeyed_service_content|libkeyed_service_core|libmanager|libmedia|libmedia_blink|libmedia_gpu|libmedia_mojo_services|libmessage_center|libmetrics_cpp|libmidi|libmirclient.9|libmojo_common_lib|libmojo_ime_lib|libmojo_public_system|libmojo_public_system_cpp|libmojo_system_impl|libnative_theme|libnet|libnet_with_v8|libonc|libplatform|libpolicy_component|libpolicy_proto|libppapi_host|libppapi_proxy|libppapi_shared|libprefs|libprinting|libprotobuf_lite|libproxy_config|librange|libresource_coordinator_cpp|libresource_coordinator_public_interfaces_internal_shared|libsandbox_services|libseccomp_bpf|libsensors|libservice|libservice_manager_cpp|libservice_manager_cpp_types|libservice_manager_mojom|libservice_manager_mojom_blink|libservice_manager_mojom_constants|libservice_manager_mojom_constants_blink|libservice_manager_mojom_constants_shared|libservice_manager_mojom_shared|libsessions|libshared_memory_support|libshell_dialogs|libskia|libsnapshot|libsql|libstartup_tracing|libstorage_browser|libstorage_common|libstub_window|libsuid_sandbox_client|libsurface|libtracing|libui_base|libui_base_ime|libui_base_x|libui_data_pack|libui_devtools|libui_touch_selection|libui_views_mus_lib|liburl|liburl_ipc|liburl_matcher|libuser_manager|libuser_prefs|libv8|libv8_libbase|libv8_libplatform|libviews|libviz_common|libviz_resource_format|libweb_dialogs|libwebdata_common|libwebview|libwidevinecdm.fedora|libwidevinecdmadapter|libwm|libwm_public|libwtf|libx11_events_platform|libx11_window +%global privlibs libEGL|libGLESv2|libVkLayer_core_validation|libVkLayer_object_tracker|libVkLayer_parameter_validation|libVkLayer_swapchain|libVkLayer_threading|libVkLayer_unique_objects|libaccessibility|libanimation|libaura|libaura_extra|libbase|libbase_i18n|libbindings|libblink_android_mojo_bindings_shared|libblink_common|libblink_controller|libblink_core|libblink_modules|libblink_mojo_bindings_shared|libblink_offscreen_canvas_mojo_bindings_shared|libblink_platform|libbluetooth|libboringssl|libbrowser_ui_views|libcaptive_portal|libcapture_base|libcapture_lib|libcc|libcc_animation|libcc_base|libcc_blink|libcc_debug|libcc_ipc|libcc_paint|libcdm_manager|libchromium_sqlite3|libclearkeycdm|libcloud_policy_proto_generated_compile|libcodec|libcolor_space|libcommon|libcompositor|libcontent|libcontent_common_mojo_bindings_shared|libcontent_public_common_mojo_bindings_shared|libcrcrypto|libdbus|libdevice_base|libdevice_event_log|libdevice_gamepad|libdevice_vr_mojo_bindings|libdevice_vr_mojo_bindings_blink|libdevice_vr_mojo_bindings_shared|libdevices|libdiscardable_memory_client|libdiscardable_memory_common|libdiscardable_memory_service|libdisplay|libdisplay_types|libdisplay_util|libdomain_reliability|libembedder|libevents|libevents_base|libevents_devices_x11|libevents_ozone_layout|libevents_x|libfingerprint|libffmpeg|libgcm|libgeolocation|libgeometry|libgeometry_skia|libgesture_detection|libgfx|libgfx_ipc|libgfx_ipc_color|libgfx_ipc_geometry|libgfx_ipc_skia|libgfx_switches|libgfx_x11|libgin|libgl_in_process_context|libgl_init|libgl_wrapper|libgles2_c_lib|libgles2_implementation|libgles2_utils|libgpu|libgtk3ui|libheadless|libhost|libicui18n|libicuuc|libinterfaces_shared|libipc|libipc_mojom|libipc_mojom_shared|libjs|libkeyboard|libkeyboard_with_content|libkeycodes_x11|libkeyed_service_content|libkeyed_service_core|libmanager|libmedia|libmedia_blink|libmedia_gpu|libmedia_mojo_services|libmessage_center|libmetrics_cpp|libmidi|libmirclient.9|libmojo_common_lib|libmojo_ime_lib|libmojo_public_system|libmojo_public_system_cpp|libmojo_system_impl|libnative_theme|libnet|libnet_with_v8|libonc|libplatform|libpolicy_component|libpolicy_proto|libppapi_host|libppapi_proxy|libppapi_shared|libprefs|libprinting|libprotobuf_lite|libproxy_config|librange|libresource_coordinator_cpp|libresource_coordinator_public_interfaces_internal_shared|libsandbox_services|libseccomp_bpf|libsensors|libservice|libservice_manager_cpp|libservice_manager_cpp_types|libservice_manager_mojom|libservice_manager_mojom_blink|libservice_manager_mojom_constants|libservice_manager_mojom_constants_blink|libservice_manager_mojom_constants_shared|libservice_manager_mojom_shared|libsessions|libshared_memory_support|libshell_dialogs|libskia|libsnapshot|libsql|libstartup_tracing|libstorage_browser|libstorage_common|libstub_window|libsuid_sandbox_client|libsurface|libtracing|libui_base|libui_base_ime|libui_base_x|libui_data_pack|libui_devtools|libui_touch_selection|libui_views_mus_lib|liburl|liburl_ipc|liburl_matcher|libuser_manager|libuser_prefs|libv8|libv8_libbase|libv8_libplatform|libviews|libviz_common|libviz_resource_format|libweb_dialogs|libwebdata_common|libwebview|libwidevinecdm|libwidevinecdmadapter|libwm|libwm_public|libwtf|libx11_events_platform|libx11_window %global __requires_exclude ^(%{privlibs})\\.so # Try to not use the Xvfb as it is slow.. @@ -118,8 +118,8 @@ Name: chromium%{chromium_channel}%{?freeworld:-freeworld} %else Name: chromium%{chromium_channel} %endif -Version: %{majorversion}.0.3202.62 -Release: 1%{?dist}.1 +Version: %{majorversion}.0.3202.75 +Release: 1%{?dist} Summary: A WebKit (Blink) powered web browser Url: http://www.chromium.org/Home License: BSD and LGPLv2+ and ASL 2.0 and IJG and MIT and GPLv2+ and ISC and OpenSSL and (MPLv1.1 or GPLv2 or LGPLv2) @@ -216,9 +216,6 @@ Patch62: chromium-gcc5-r3.patch Patch63: chromium-gn-bootstrap-r17.patch # Fix _cplusplus conditional Patch64: chromium-62.0.3202.62-correct-cplusplus-check.patch -# epel7 does not know about c++14 -Patch65: chromium-62.0.3202.62-epel7-noc++14.patch -Patch66: chromium-62.0.3202.62-epel7-c++11-support.patch ### Chromium Tests Patches ### Patch100: chromium-46.0.2490.86-use_system_opus.patch @@ -399,6 +396,10 @@ BuildRequires: systemd # using the built from source version on aarch64 BuildRequires: ninja-build +%if 0%{?rhel} == 7 +BuildRequires: devtoolset-7-toolchain, devtoolset-7-libatomic-devel +%endif + # We pick up an automatic requires on the library, but we need the version check # because the nss shared library is unversioned. # This is to prevent someone from hitting http://code.google.com/p/chromium/issues/detail?id=26448 @@ -668,8 +669,6 @@ udev. %patch59 -p1 -b .gcc-nc %patch60 -p1 -b .nonullptr %patch61 -p1 -b .another-rvalue-fix -%patch65 -p1 -b .epel7-noc++14 -%patch66 -p1 -b .epel7-c++11 %endif %patch50 -p1 -b .pathfix %patch53 -p1 -b .nogccoptmath @@ -809,9 +808,6 @@ CHROMIUM_CORE_GN_DEFINES+=' treat_warnings_as_errors=false linux_use_bundled_bin %ifarch aarch64 CHROMIUM_CORE_GN_DEFINES+=' target_cpu="arm64"' %endif -%if 0%{?rhel} == 7 -CHROMIUM_CORE_GN_DEFINES+=' use_cxx11=true' -%endif export CHROMIUM_CORE_GN_DEFINES CHROMIUM_BROWSER_GN_DEFINES="" @@ -990,10 +986,6 @@ build/linux/unbundle/remove_bundled_libraries.py \ 'third_party/swiftshader/third_party/subzero' \ 'third_party/swiftshader/third_party/LLVM' \ 'third_party/swiftshader/third_party/llvm-subzero' \ -%if 0%{?rhel} == 7 - 'third_party/tao' \ - 'third_party/tao/seq' \ -%endif 'third_party/tcmalloc' \ 'third_party/usb_ids' \ 'third_party/usrsctp' \ @@ -1077,6 +1069,10 @@ sed -i '/aarch64)/ a \ exec "/usr/bin/ninja-build" "$@";;\' ../depot_tool %endif sed -i 's|exec "${THIS_DIR}/ninja-linux${LONG_BIT}"|exec "/usr/bin/ninja-build"|g' ../depot_tools/ninja +%if 0%{?rhel} == 7 +. /opt/rh/devtoolset-7/enable +%endif + tools/gn/bootstrap/bootstrap.py -v --gn-gen-args "$CHROMIUM_CORE_GN_DEFINES $CHROMIUM_BROWSER_GN_DEFINES" %{target}/gn gen --args="$CHROMIUM_CORE_GN_DEFINES $CHROMIUM_BROWSER_GN_DEFINES" %{target} @@ -1103,6 +1099,9 @@ FILE=chrome/common/channel_info_posix.cc sed -i.orig -e 's/getenv("CHROME_VERSION_EXTRA")/"Fedora Project"/' $FILE %build +%if 0%{?rhel} == 7 +. /opt/rh/devtoolset-7/enable +%endif %if %{?tests} # Tests targets taken from testing/buildbot/chromium.linux.json and obtained with @@ -1910,6 +1909,10 @@ getent group chrome-remote-desktop >/dev/null || groupadd -r chrome-remote-deskt %changelog +* Fri Oct 27 2017 Tom Callaway 62.0.3202.75-1 +- update to 62.0.3202.75 +- use devtoolset-7-toolchain to build on epel7 + * Tue Oct 24 2017 Tom Callaway 62.0.3202.62-1.1 - do not attempt std=c++14 on epel7 diff --git a/sources b/sources index 9d1d29d..2aea4ff 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ SHA512 (depot_tools.git-master.tar.gz) = d3d6a1873b2b0296a8cd99e0d8d2e629a17b1808934b4972556168f8b4ccea60577ebaeab4445baf15afb1b04080808db59a832a5b61d247bd48da14fa6acf03 -SHA512 (chromium-62.0.3202.62-clean.tar.xz) = 5151cdd4cc9f5735984ea16615311dbec759d62496b619fa5a04e06e08821ccba7f11e2d1835e2020edcb783150cc7f1880e62084ae9f69057fabea0459e147b +SHA512 (chromium-62.0.3202.75-clean.tar.xz) = 4b146d7f4d6d45ae8e56ede13539320a1cc0969fe4a00e6ef47d64dd162442b2089931f80265d852f3c376afc7de0c82fcc1f4544bba073256426626b709f71f