<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[207517] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/207517">207517</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2016-10-18 19:43:44 -0700 (Tue, 18 Oct 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Replace std::experimental::variant with WTF::Variant (or similar)
https://bugs.webkit.org/show_bug.cgi?id=163626

Patch by Sam Weinig &lt;sam@webkit.org&gt; on 2016-10-18
Reviewed by Chris Dumez.

Rename std::experimental::variant, Variant. Move helpers get/holds_alternative/etc.
into the WTF namespace.

Source/JavaScriptCore:

* domjit/DOMJITReg.h:
(JSC::DOMJIT::Reg::gpr):
(JSC::DOMJIT::Reg::fpr):
(JSC::DOMJIT::Reg::jsValueRegs):

Source/WebCore:

* Modules/fetch/FetchBody.h:
(WebCore::FetchBody::isBlob):
(WebCore::FetchBody::isFormData):
(WebCore::FetchBody::isArrayBuffer):
(WebCore::FetchBody::isArrayBufferView):
(WebCore::FetchBody::isURLSearchParams):
(WebCore::FetchBody::isText):
(WebCore::FetchBody::blobBody):
(WebCore::FetchBody::formDataBody):
(WebCore::FetchBody::arrayBufferBody):
(WebCore::FetchBody::arrayBufferViewBody):
(WebCore::FetchBody::textBody):
(WebCore::FetchBody::urlSearchParamsBody):
* bindings/generic/IDLTypes.h:
* dom/ExceptionOr.h:
(WebCore::ExceptionOr&lt;ReturnType&gt;::hasException):
(WebCore::ExceptionOr&lt;ReturnType&gt;::releaseException):
(WebCore::ExceptionOr&lt;ReturnType&gt;::releaseReturnValue):
* dom/MessageEvent.cpp:
(WebCore::MessageEvent::source):
* dom/MessageEvent.h:
* dom/Node.cpp:
(WebCore::nodeSetPreTransformedFromNodeOrStringVector):
(WebCore::Node::convertNodesOrStringsIntoNode):
* dom/Node.h:
* html/HTMLOptionsCollection.h:
* html/HTMLSelectElement.cpp:
(WebCore::HTMLSelectElement::add):
* html/HTMLSelectElement.h:
* html/track/TrackEvent.cpp:
(WebCore::TrackEvent::TrackEvent):
* html/track/TrackEvent.h:

Source/WebKit/mac:

* DOM/DOMHTMLSelectElement.mm:
(-[DOMHTMLSelectElement add:before:]):

Source/WTF:

* wtf/Forward.h:
* wtf/Variant.h:

Tools:

* TestWebKitAPI/Tests/WTF/Variant.cpp:
(TestWebKitAPI::TEST):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoredomjitDOMJITRegh">trunk/Source/JavaScriptCore/domjit/DOMJITReg.h</a></li>
<li><a href="#trunkSourceWTFChangeLog">trunk/Source/WTF/ChangeLog</a></li>
<li><a href="#trunkSourceWTFwtfForwardh">trunk/Source/WTF/wtf/Forward.h</a></li>
<li><a href="#trunkSourceWTFwtfVarianth">trunk/Source/WTF/wtf/Variant.h</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreModulesfetchFetchBodyh">trunk/Source/WebCore/Modules/fetch/FetchBody.h</a></li>
<li><a href="#trunkSourceWebCorebindingsgenericIDLTypesh">trunk/Source/WebCore/bindings/generic/IDLTypes.h</a></li>
<li><a href="#trunkSourceWebCoredomExceptionOrh">trunk/Source/WebCore/dom/ExceptionOr.h</a></li>
<li><a href="#trunkSourceWebCoredomMessageEventcpp">trunk/Source/WebCore/dom/MessageEvent.cpp</a></li>
<li><a href="#trunkSourceWebCoredomMessageEventh">trunk/Source/WebCore/dom/MessageEvent.h</a></li>
<li><a href="#trunkSourceWebCoredomNodecpp">trunk/Source/WebCore/dom/Node.cpp</a></li>
<li><a href="#trunkSourceWebCoredomNodeh">trunk/Source/WebCore/dom/Node.h</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLOptionsCollectionh">trunk/Source/WebCore/html/HTMLOptionsCollection.h</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLSelectElementcpp">trunk/Source/WebCore/html/HTMLSelectElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLSelectElementh">trunk/Source/WebCore/html/HTMLSelectElement.h</a></li>
<li><a href="#trunkSourceWebCorehtmltrackTrackEventcpp">trunk/Source/WebCore/html/track/TrackEvent.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmltrackTrackEventh">trunk/Source/WebCore/html/track/TrackEvent.h</a></li>
<li><a href="#trunkSourceWebKitmacChangeLog">trunk/Source/WebKit/mac/ChangeLog</a></li>
<li><a href="#trunkSourceWebKitmacDOMDOMHTMLSelectElementmm">trunk/Source/WebKit/mac/DOM/DOMHTMLSelectElement.mm</a></li>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsTestWebKitAPITestsWTFVariantcpp">trunk/Tools/TestWebKitAPI/Tests/WTF/Variant.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (207516 => 207517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2016-10-19 02:33:49 UTC (rev 207516)
+++ trunk/Source/JavaScriptCore/ChangeLog        2016-10-19 02:43:44 UTC (rev 207517)
</span><span class="lines">@@ -1,3 +1,18 @@
</span><ins>+2016-10-18  Sam Weinig  &lt;sam@webkit.org&gt;
+
+        Replace std::experimental::variant with WTF::Variant (or similar)
+        https://bugs.webkit.org/show_bug.cgi?id=163626
+
+        Reviewed by Chris Dumez.
+
+        Rename std::experimental::variant, Variant. Move helpers get/holds_alternative/etc.
+        into the WTF namespace.
+
+        * domjit/DOMJITReg.h:
+        (JSC::DOMJIT::Reg::gpr):
+        (JSC::DOMJIT::Reg::fpr):
+        (JSC::DOMJIT::Reg::jsValueRegs):
+
</ins><span class="cx"> 2016-10-18  Keith Miller  &lt;keith_miller@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         GetByVal to GetById conversion in the DFG is incorrect for getters with control flow
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredomjitDOMJITRegh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/domjit/DOMJITReg.h (207516 => 207517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/domjit/DOMJITReg.h        2016-10-19 02:33:49 UTC (rev 207516)
+++ trunk/Source/JavaScriptCore/domjit/DOMJITReg.h        2016-10-19 02:43:44 UTC (rev 207517)
</span><span class="lines">@@ -71,21 +71,21 @@
</span><span class="cx">     GPRReg gpr() const
</span><span class="cx">     {
</span><span class="cx">         ASSERT(isGPR());
</span><del>-        return std::experimental::get&lt;GPRReg&gt;(m_variant);
</del><ins>+        return WTF::get&lt;GPRReg&gt;(m_variant);
</ins><span class="cx">     }
</span><span class="cx">     FPRReg fpr() const
</span><span class="cx">     {
</span><span class="cx">         ASSERT(isFPR());
</span><del>-        return std::experimental::get&lt;FPRReg&gt;(m_variant);
</del><ins>+        return WTF::get&lt;FPRReg&gt;(m_variant);
</ins><span class="cx">     }
</span><span class="cx">     JSValueRegs jsValueRegs() const
</span><span class="cx">     {
</span><span class="cx">         ASSERT(isJSValueRegs());
</span><del>-        return std::experimental::get&lt;JSValueRegs&gt;(m_variant);
</del><ins>+        return WTF::get&lt;JSValueRegs&gt;(m_variant);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    std::experimental::variant&lt;GPRReg, FPRReg, JSValueRegs&gt; m_variant;
</del><ins>+    Variant&lt;GPRReg, FPRReg, JSValueRegs&gt; m_variant;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } }
</span></span></pre></div>
<a id="trunkSourceWTFChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/ChangeLog (207516 => 207517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/ChangeLog        2016-10-19 02:33:49 UTC (rev 207516)
+++ trunk/Source/WTF/ChangeLog        2016-10-19 02:43:44 UTC (rev 207517)
</span><span class="lines">@@ -1,3 +1,16 @@
</span><ins>+2016-10-18  Sam Weinig  &lt;sam@webkit.org&gt;
+
+        Replace std::experimental::variant with WTF::Variant (or similar)
+        https://bugs.webkit.org/show_bug.cgi?id=163626
+
+        Reviewed by Chris Dumez.
+
+        Rename std::experimental::variant, Variant. Move helpers get/holds_alternative/etc.
+        into the WTF namespace.
+
+        * wtf/Forward.h:
+        * wtf/Variant.h:
+
</ins><span class="cx"> 2016-10-18  Filip Pizlo  &lt;fpizlo@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         WTF should make it easier to create threads that die automatically after inactivity
</span></span></pre></div>
<a id="trunkSourceWTFwtfForwardh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/Forward.h (207516 => 207517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/Forward.h        2016-10-19 02:33:49 UTC (rev 207516)
+++ trunk/Source/WTF/wtf/Forward.h        2016-10-19 02:43:44 UTC (rev 207517)
</span><span class="lines">@@ -34,6 +34,7 @@
</span><span class="cx"> template&lt;typename T&gt; class RefPtr;
</span><span class="cx"> template&lt;typename T&gt; class StringBuffer;
</span><span class="cx"> 
</span><ins>+template&lt;typename... T&gt; class Variant;
</ins><span class="cx"> template&lt;typename T, size_t inlineCapacity, typename OverflowHandler, size_t minCapacity&gt; class Vector;
</span><span class="cx"> 
</span><span class="cx"> class AtomicString;
</span><span class="lines">@@ -51,18 +52,6 @@
</span><span class="cx"> 
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-namespace std {
-namespace experimental {
-
-template&lt;typename... T&gt; class variant;
-
-}
-
-template&lt;typename... Types&gt;
-using variant = std::experimental::variant&lt;Types...&gt;;
-
-}
-
</del><span class="cx"> using WTF::AtomicString;
</span><span class="cx"> using WTF::AtomicStringImpl;
</span><span class="cx"> using WTF::BinarySemaphore;
</span><span class="lines">@@ -84,4 +73,5 @@
</span><span class="cx"> using WTF::StringImpl;
</span><span class="cx"> using WTF::StringView;
</span><span class="cx"> using WTF::TextPosition;
</span><ins>+using WTF::Variant;
</ins><span class="cx"> using WTF::Vector;
</span></span></pre></div>
<a id="trunkSourceWTFwtfVarianth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/Variant.h (207516 => 207517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/Variant.h        2016-10-19 02:33:49 UTC (rev 207516)
+++ trunk/Source/WTF/wtf/Variant.h        2016-10-19 02:43:44 UTC (rev 207517)
</span><span class="lines">@@ -59,8 +59,7 @@
</span><span class="cx"> 
</span><span class="cx"> #if !COMPILER(CLANG) || WTF_CPP_STD_VER &gt;= 14
</span><span class="cx"> 
</span><del>-namespace std {
-namespace experimental {
</del><ins>+namespace WTF {
</ins><span class="cx"> 
</span><span class="cx"> #if COMPILER_SUPPORTS(EXCEPTIONS)
</span><span class="cx"> #define __THROW_EXCEPTION(__exception) throw __exception;
</span><span class="lines">@@ -165,7 +164,7 @@
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> template&lt;typename ... _Types&gt;
</span><del>-class variant;
</del><ins>+class Variant;
</ins><span class="cx"> 
</span><span class="cx"> template&lt;typename&gt;
</span><span class="cx"> struct variant_size;
</span><span class="lines">@@ -180,7 +179,7 @@
</span><span class="cx"> struct variant_size&lt;const volatile _Type&gt; : variant_size&lt;_Type&gt; {};
</span><span class="cx"> 
</span><span class="cx"> template &lt;typename... _Types&gt;
</span><del>-struct variant_size&lt;variant&lt;_Types...&gt;&gt;
</del><ins>+struct variant_size&lt;Variant&lt;_Types...&gt;&gt;
</ins><span class="cx">     : std::integral_constant&lt;size_t, sizeof...(_Types)&gt; {};
</span><span class="cx"> 
</span><span class="cx"> template&lt;size_t _Index,typename _Type&gt;
</span><span class="lines">@@ -205,7 +204,7 @@
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> template&lt;size_t _Index,typename ... _Types&gt;
</span><del>-struct variant_alternative&lt;_Index,variant&lt;_Types...&gt;&gt;{
</del><ins>+struct variant_alternative&lt;_Index,Variant&lt;_Types...&gt;&gt;{
</ins><span class="cx">     using type=typename __indexed_type&lt;_Index,_Types...&gt;::__type;
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="lines">@@ -212,43 +211,43 @@
</span><span class="cx"> constexpr size_t variant_npos=-1;
</span><span class="cx"> 
</span><span class="cx"> template&lt;typename _Type,typename ... _Types&gt;
</span><del>-constexpr _Type&amp; get(variant&lt;_Types...&gt;&amp;);
</del><ins>+constexpr _Type&amp; get(Variant&lt;_Types...&gt;&amp;);
</ins><span class="cx"> 
</span><span class="cx"> template&lt;typename _Type,typename ... _Types&gt;
</span><del>-constexpr _Type const&amp; get(variant&lt;_Types...&gt; const&amp;);
</del><ins>+constexpr _Type const&amp; get(Variant&lt;_Types...&gt; const&amp;);
</ins><span class="cx"> 
</span><span class="cx"> template&lt;typename _Type,typename ... _Types&gt;
</span><del>-constexpr _Type&amp;&amp; get(variant&lt;_Types...&gt;&amp;&amp;);
</del><ins>+constexpr _Type&amp;&amp; get(Variant&lt;_Types...&gt;&amp;&amp;);
</ins><span class="cx"> 
</span><span class="cx"> template&lt;typename _Type,typename ... _Types&gt;
</span><del>-constexpr const _Type&amp;&amp; get(variant&lt;_Types...&gt; const&amp;&amp;);
</del><ins>+constexpr const _Type&amp;&amp; get(Variant&lt;_Types...&gt; const&amp;&amp;);
</ins><span class="cx"> 
</span><span class="cx"> template&lt;ptrdiff_t _Index,typename ... _Types&gt;
</span><del>-constexpr typename __indexed_type&lt;_Index,_Types...&gt;::__type&amp; get(variant&lt;_Types...&gt;&amp;);
</del><ins>+constexpr typename __indexed_type&lt;_Index,_Types...&gt;::__type&amp; get(Variant&lt;_Types...&gt;&amp;);
</ins><span class="cx"> 
</span><span class="cx"> template&lt;ptrdiff_t _Index,typename ... _Types&gt;
</span><del>-constexpr typename __indexed_type&lt;_Index,_Types...&gt;::__type&amp;&amp; get(variant&lt;_Types...&gt;&amp;&amp;);
</del><ins>+constexpr typename __indexed_type&lt;_Index,_Types...&gt;::__type&amp;&amp; get(Variant&lt;_Types...&gt;&amp;&amp;);
</ins><span class="cx"> 
</span><span class="cx"> template&lt;ptrdiff_t _Index,typename ... _Types&gt;
</span><span class="cx"> constexpr typename __indexed_type&lt;_Index,_Types...&gt;::__type const&amp; get(
</span><del>-    variant&lt;_Types...&gt; const&amp;);
</del><ins>+    Variant&lt;_Types...&gt; const&amp;);
</ins><span class="cx"> 
</span><span class="cx"> template &lt;ptrdiff_t _Index, typename... _Types&gt;
</span><span class="cx"> constexpr const typename __indexed_type&lt;_Index, _Types...&gt;::__type &amp;&amp;
</span><del>-get(variant&lt;_Types...&gt; const &amp;&amp;);
</del><ins>+get(Variant&lt;_Types...&gt; const &amp;&amp;);
</ins><span class="cx"> 
</span><span class="cx"> template&lt;typename _Type,typename ... _Types&gt;
</span><del>-constexpr std::add_pointer_t&lt;_Type&gt; get_if(variant&lt;_Types...&gt;&amp;);
</del><ins>+constexpr std::add_pointer_t&lt;_Type&gt; get_if(Variant&lt;_Types...&gt;&amp;);
</ins><span class="cx"> 
</span><span class="cx"> template&lt;typename _Type,typename ... _Types&gt;
</span><del>-constexpr std::add_pointer_t&lt;_Type const&gt; get_if(variant&lt;_Types...&gt; const&amp;);
</del><ins>+constexpr std::add_pointer_t&lt;_Type const&gt; get_if(Variant&lt;_Types...&gt; const&amp;);
</ins><span class="cx"> 
</span><span class="cx"> template&lt;ptrdiff_t _Index,typename ... _Types&gt;
</span><del>-constexpr std::add_pointer_t&lt;typename __indexed_type&lt;_Index,_Types...&gt;::__type&gt; get_if(variant&lt;_Types...&gt;&amp;);
</del><ins>+constexpr std::add_pointer_t&lt;typename __indexed_type&lt;_Index,_Types...&gt;::__type&gt; get_if(Variant&lt;_Types...&gt;&amp;);
</ins><span class="cx"> 
</span><span class="cx"> template&lt;ptrdiff_t _Index,typename ... _Types&gt;
</span><span class="cx"> constexpr std::add_pointer_t&lt;typename __indexed_type&lt;_Index,_Types...&gt;::__type const&gt; get_if(
</span><del>-    variant&lt;_Types...&gt; const&amp;);
</del><ins>+    Variant&lt;_Types...&gt; const&amp;);
</ins><span class="cx"> 
</span><span class="cx"> template&lt;ptrdiff_t _Index,typename ... _Types&gt;
</span><span class="cx"> struct __variant_accessor;
</span><span class="lines">@@ -379,7 +378,7 @@
</span><span class="cx"> struct __any_backup_storage_required;
</span><span class="cx"> 
</span><span class="cx"> template&lt;typename ... _Types&gt;
</span><del>-struct __any_backup_storage_required&lt;variant&lt;_Types...&gt; &gt;{
</del><ins>+struct __any_backup_storage_required&lt;Variant&lt;_Types...&gt; &gt;{
</ins><span class="cx">     static const bool __value=
</span><span class="cx">         __any_backup_storage_required_impl&lt;0,sizeof...(_Types),_Types...&gt;::__value;
</span><span class="cx"> };
</span><span class="lines">@@ -704,7 +703,7 @@
</span><span class="cx"> struct __variant_indices;
</span><span class="cx"> 
</span><span class="cx"> template&lt;typename ... _Types&gt;
</span><del>-struct __variant_indices&lt;variant&lt;_Types...&gt;&gt;{
</del><ins>+struct __variant_indices&lt;Variant&lt;_Types...&gt;&gt;{
</ins><span class="cx">     typedef typename __type_indices&lt;_Types...&gt;::__type __type;
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="lines">@@ -1436,17 +1435,17 @@
</span><span class="cx"> {};
</span><span class="cx"> 
</span><span class="cx"> template&lt;typename ... _Types&gt;
</span><del>-class variant:
</del><ins>+class Variant:
</ins><span class="cx">         private __variant_base&lt;
</span><del>-    variant&lt;_Types...&gt;,__all_trivially_destructible&lt;_Types...&gt;::__value&gt;
</del><ins>+    Variant&lt;_Types...&gt;,__all_trivially_destructible&lt;_Types...&gt;::__value&gt;
</ins><span class="cx"> {
</span><del>-    typedef __variant_base&lt;variant&lt;_Types...&gt;,__all_trivially_destructible&lt;_Types...&gt;::__value&gt; __base_type;
</del><ins>+    typedef __variant_base&lt;Variant&lt;_Types...&gt;,__all_trivially_destructible&lt;_Types...&gt;::__value&gt; __base_type;
</ins><span class="cx">     friend __base_type;
</span><del>-    friend struct __copy_construct_op_table&lt;variant&gt;;
-    friend struct __copy_assign_op_table&lt;variant&gt;;
-    friend struct __move_construct_op_table&lt;variant&gt;;
-    friend struct __move_assign_op_table&lt;variant&gt;;
-    friend struct __destroy_op_table&lt;variant&gt;;
</del><ins>+    friend struct __copy_construct_op_table&lt;Variant&gt;;
+    friend struct __copy_assign_op_table&lt;Variant&gt;;
+    friend struct __move_construct_op_table&lt;Variant&gt;;
+    friend struct __move_assign_op_table&lt;Variant&gt;;
+    friend struct __destroy_op_table&lt;Variant&gt;;
</ins><span class="cx">     
</span><span class="cx">     template&lt;ptrdiff_t _Index,typename ... _Types2&gt;
</span><span class="cx">     friend struct __variant_accessor;
</span><span class="lines">@@ -1467,24 +1466,24 @@
</span><span class="cx">     void __destroy_self(){
</span><span class="cx">         if(valueless_by_exception())
</span><span class="cx">             return;
</span><del>-        __destroy_op_table&lt;variant&gt;::__apply[index()](this);
</del><ins>+        __destroy_op_table&lt;Variant&gt;::__apply[index()](this);
</ins><span class="cx">         __index=-1;
</span><span class="cx">     }
</span><span class="cx">     
</span><del>-    ptrdiff_t __move_construct(variant&amp; __other){
</del><ins>+    ptrdiff_t __move_construct(Variant&amp; __other){
</ins><span class="cx">         ptrdiff_t const __other_index=__other.index();
</span><span class="cx">         if(__other_index==-1)
</span><span class="cx">             return -1;
</span><del>-        __move_construct_op_table&lt;variant&gt;::__apply[__other_index](this,__other);
</del><ins>+        __move_construct_op_table&lt;Variant&gt;::__apply[__other_index](this,__other);
</ins><span class="cx">         __other.__destroy_self();
</span><span class="cx">         return __other_index;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    ptrdiff_t __copy_construct(variant const&amp; __other){
</del><ins>+    ptrdiff_t __copy_construct(Variant const&amp; __other){
</ins><span class="cx">         ptrdiff_t const __other_index=__other.index();
</span><span class="cx">         if(__other_index==-1)
</span><span class="cx">             return -1;
</span><del>-        __copy_construct_op_table&lt;variant&gt;::__apply[__other_index](this,__other);
</del><ins>+        __copy_construct_op_table&lt;Variant&gt;::__apply[__other_index](this,__other);
</ins><span class="cx">         return __other_index;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -1531,35 +1530,35 @@
</span><span class="cx">     struct __private_type{};
</span><span class="cx"> 
</span><span class="cx"> public:
</span><del>-    constexpr variant()
</del><ins>+    constexpr Variant()
</ins><span class="cx">         __NOEXCEPT_(noexcept(typename __indexed_type&lt;0,_Types...&gt;::__type())):
</span><span class="cx">         __storage(in_place&lt;0&gt;),
</span><span class="cx">         __index(0)
</span><span class="cx">     {}
</span><span class="cx"> 
</span><del>-    constexpr variant(typename std::conditional&lt;__all_move_constructible&lt;_Types...&gt;::value,variant,__private_type&gt;::type&amp;&amp; __other)
</del><ins>+    constexpr Variant(typename std::conditional&lt;__all_move_constructible&lt;_Types...&gt;::value,Variant,__private_type&gt;::type&amp;&amp; __other)
</ins><span class="cx">     __NOEXCEPT_(__noexcept_variant_move_construct&lt;_Types...&gt;::value):
</span><span class="cx">         __index(__move_construct(__other))
</span><span class="cx">     {}
</span><span class="cx"> 
</span><del>-    constexpr variant(typename std::conditional&lt;!__all_move_constructible&lt;_Types...&gt;::value,variant,__private_type&gt;::type&amp;&amp; __other)=delete;
</del><ins>+    constexpr Variant(typename std::conditional&lt;!__all_move_constructible&lt;_Types...&gt;::value,Variant,__private_type&gt;::type&amp;&amp; __other)=delete;
</ins><span class="cx">     
</span><del>-    constexpr variant(typename std::conditional&lt;__all_copy_constructible&lt;_Types...&gt;::value,variant,__private_type&gt;::type&amp; __other)
</del><ins>+    constexpr Variant(typename std::conditional&lt;__all_copy_constructible&lt;_Types...&gt;::value,Variant,__private_type&gt;::type&amp; __other)
</ins><span class="cx">     __NOEXCEPT_(__noexcept_variant_non_const_copy_construct&lt;_Types...&gt;::value):
</span><span class="cx">         __index(__copy_construct(__other))
</span><span class="cx">     {}
</span><span class="cx"> 
</span><del>-    constexpr variant(typename std::conditional&lt;!__all_copy_constructible&lt;_Types...&gt;::value,variant,__private_type&gt;::type&amp; __other)=delete;
</del><ins>+    constexpr Variant(typename std::conditional&lt;!__all_copy_constructible&lt;_Types...&gt;::value,Variant,__private_type&gt;::type&amp; __other)=delete;
</ins><span class="cx"> 
</span><del>-    constexpr variant(typename std::conditional&lt;__all_copy_constructible&lt;_Types...&gt;::value,variant,__private_type&gt;::type const&amp; __other)
</del><ins>+    constexpr Variant(typename std::conditional&lt;__all_copy_constructible&lt;_Types...&gt;::value,Variant,__private_type&gt;::type const&amp; __other)
</ins><span class="cx">     __NOEXCEPT_(__noexcept_variant_const_copy_construct&lt;_Types...&gt;::value):
</span><span class="cx">         __index(__copy_construct(__other))
</span><span class="cx">     {}
</span><span class="cx"> 
</span><del>-    constexpr variant(typename std::conditional&lt;!__all_copy_constructible&lt;_Types...&gt;::value,variant,__private_type&gt;::type const&amp; __other)=delete;
</del><ins>+    constexpr Variant(typename std::conditional&lt;!__all_copy_constructible&lt;_Types...&gt;::value,Variant,__private_type&gt;::type const&amp; __other)=delete;
</ins><span class="cx">     
</span><span class="cx">     template&lt;typename _Type,typename ... _Args&gt;
</span><del>-    explicit constexpr variant(in_place_type_t&lt;_Type&gt;,_Args&amp;&amp; ... __args):
</del><ins>+    explicit constexpr Variant(in_place_type_t&lt;_Type&gt;,_Args&amp;&amp; ... __args):
</ins><span class="cx">         __storage(
</span><span class="cx">             in_place&lt;__type_index&lt;_Type,_Types...&gt;::__value&gt;,
</span><span class="cx">             std::forward&lt;_Args&gt;(__args)...),
</span><span class="lines">@@ -1569,7 +1568,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     template&lt;size_t _Index,typename ... _Args&gt;
</span><del>-    explicit constexpr variant(in_place_index_t&lt;_Index&gt;,_Args&amp;&amp; ... __args):
</del><ins>+    explicit constexpr Variant(in_place_index_t&lt;_Index&gt;,_Args&amp;&amp; ... __args):
</ins><span class="cx">         __storage(in_place&lt;_Index&gt;,std::forward&lt;_Args&gt;(__args)...),
</span><span class="cx">         __index(_Index)
</span><span class="cx">     {
</span><span class="lines">@@ -1577,7 +1576,7 @@
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     template&lt;typename _Type&gt;
</span><del>-    constexpr variant(_Type&amp;&amp; __x):
</del><ins>+    constexpr Variant(_Type&amp;&amp; __x):
</ins><span class="cx">         __storage(
</span><span class="cx">             in_place&lt;
</span><span class="cx">             __type_index_to_construct&lt;_Type,_Types...&gt;::__value&gt;,
</span><span class="lines">@@ -1590,7 +1589,7 @@
</span><span class="cx">              typename std::enable_if&lt;
</span><span class="cx">                  (__constructible_matches&lt;std::initializer_list&lt;_Type&gt;,_Types...&gt;::__type::__length&gt;0)
</span><span class="cx">              &gt;::type&gt;
</span><del>-    constexpr variant(std::initializer_list&lt;_Type&gt; __x):
</del><ins>+    constexpr Variant(std::initializer_list&lt;_Type&gt; __x):
</ins><span class="cx">         __storage(
</span><span class="cx">             in_place&lt;
</span><span class="cx">             __type_index_to_construct&lt;std::initializer_list&lt;_Type&gt;,_Types...&gt;::__value&gt;,
</span><span class="lines">@@ -1599,7 +1598,7 @@
</span><span class="cx">     {}
</span><span class="cx">     
</span><span class="cx">     template&lt;typename _Type&gt;
</span><del>-    variant&amp; operator=(_Type&amp;&amp; __x){
</del><ins>+    Variant&amp; operator=(_Type&amp;&amp; __x){
</ins><span class="cx">         constexpr size_t _Index=
</span><span class="cx">             __type_index_to_construct&lt;_Type,_Types...&gt;::__value;
</span><span class="cx">         if(_Index==__index){
</span><span class="lines">@@ -1611,76 +1610,76 @@
</span><span class="cx">         return *this;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    variant &amp;operator=(
</del><ins>+    Variant &amp;operator=(
</ins><span class="cx">         typename std::conditional&lt;
</span><span class="cx">             !(__all_copy_constructible&lt;_Types...&gt;::value &amp;&amp;
</span><span class="cx">               __all_move_constructible&lt;_Types...&gt;::value &amp;&amp;
</span><span class="cx">               __all_copy_assignable&lt;_Types...&gt;::value),
</span><del>-            variant, __private_type&gt;::type const &amp;__other) = delete;
</del><ins>+            Variant, __private_type&gt;::type const &amp;__other) = delete;
</ins><span class="cx"> 
</span><del>-    variant &amp;operator=(
</del><ins>+    Variant &amp;operator=(
</ins><span class="cx">         typename std::conditional&lt;
</span><span class="cx">             __all_copy_constructible&lt;_Types...&gt;::value &amp;&amp;
</span><span class="cx">                 __all_move_constructible&lt;_Types...&gt;::value &amp;&amp;
</span><span class="cx">                 __all_copy_assignable&lt;_Types...&gt;::value,
</span><del>-            variant, __private_type&gt;::type const &amp;__other) {
</del><ins>+            Variant, __private_type&gt;::type const &amp;__other) {
</ins><span class="cx">         if (__other.valueless_by_exception()) {
</span><span class="cx">             __destroy_self();
</span><span class="cx">         }
</span><span class="cx">         else if(__other.index()==index()){
</span><del>-            __copy_assign_op_table&lt;variant&gt;::__apply[index()](this,__other);
</del><ins>+            __copy_assign_op_table&lt;Variant&gt;::__apply[index()](this,__other);
</ins><span class="cx">         }
</span><span class="cx">         else{
</span><del>-            __replace_construct_helper::__op_table&lt;variant&gt;::__copy_assign[
</del><ins>+            __replace_construct_helper::__op_table&lt;Variant&gt;::__copy_assign[
</ins><span class="cx">                 __other.index()](this,__other);
</span><span class="cx">         }
</span><span class="cx">         return *this;
</span><span class="cx">     }
</span><del>-    variant &amp;operator=(
</del><ins>+    Variant &amp;operator=(
</ins><span class="cx">         typename std::conditional&lt;
</span><span class="cx">             !(__all_copy_constructible&lt;_Types...&gt;::value &amp;&amp;
</span><span class="cx">               __all_move_constructible&lt;_Types...&gt;::value &amp;&amp;
</span><span class="cx">               __all_copy_assignable&lt;_Types...&gt;::value),
</span><del>-            variant, __private_type&gt;::type &amp;__other) = delete;
</del><ins>+            Variant, __private_type&gt;::type &amp;__other) = delete;
</ins><span class="cx"> 
</span><del>-    variant &amp;operator=(
</del><ins>+    Variant &amp;operator=(
</ins><span class="cx">         typename std::conditional&lt;
</span><span class="cx">             __all_copy_constructible&lt;_Types...&gt;::value &amp;&amp;
</span><span class="cx">                 __all_move_constructible&lt;_Types...&gt;::value &amp;&amp;
</span><span class="cx">                 __all_copy_assignable&lt;_Types...&gt;::value,
</span><del>-            variant, __private_type&gt;::type &amp;__other) {
</del><ins>+            Variant, __private_type&gt;::type &amp;__other) {
</ins><span class="cx">         if(__other.valueless_by_exception()){
</span><span class="cx">             __destroy_self();
</span><span class="cx">         }
</span><span class="cx">         else if(__other.index()==index()){
</span><del>-            __copy_assign_op_table&lt;variant&gt;::__apply[index()](this,__other);
</del><ins>+            __copy_assign_op_table&lt;Variant&gt;::__apply[index()](this,__other);
</ins><span class="cx">         }
</span><span class="cx">         else{
</span><del>-            __replace_construct_helper::__op_table&lt;variant&gt;::__copy_assign[
</del><ins>+            __replace_construct_helper::__op_table&lt;Variant&gt;::__copy_assign[
</ins><span class="cx">                 __other.index()](this,__other);
</span><span class="cx">         }
</span><span class="cx">         return *this;
</span><span class="cx">     }
</span><del>-    variant &amp;operator=(
</del><ins>+    Variant &amp;operator=(
</ins><span class="cx">         typename std::conditional&lt;
</span><span class="cx">             !(__all_move_constructible&lt;_Types...&gt;::value &amp;&amp;
</span><span class="cx">               __all_move_assignable&lt;_Types...&gt;::value),
</span><del>-            variant, __private_type&gt;::type &amp;&amp;__other) = delete;
</del><ins>+            Variant, __private_type&gt;::type &amp;&amp;__other) = delete;
</ins><span class="cx"> 
</span><del>-    variant &amp;operator=(
</del><ins>+    Variant &amp;operator=(
</ins><span class="cx">         typename std::conditional&lt;__all_move_constructible&lt;_Types...&gt;::value &amp;&amp;
</span><span class="cx">                                       __all_move_assignable&lt;_Types...&gt;::value,
</span><del>-                                  variant, __private_type&gt;::type &amp;&amp;
</del><ins>+                                  Variant, __private_type&gt;::type &amp;&amp;
</ins><span class="cx">             __other) __NOEXCEPT_(__noexcept_variant_move_assign&lt;_Types...&gt;::value) {
</span><span class="cx">         if (__other.valueless_by_exception()) {
</span><span class="cx">             __destroy_self();
</span><span class="cx">         }
</span><span class="cx">         else if(__other.index()==index()){
</span><del>-            __move_assign_op_table&lt;variant&gt;::__apply[index()](this,__other);
</del><ins>+            __move_assign_op_table&lt;Variant&gt;::__apply[index()](this,__other);
</ins><span class="cx">             __other.__destroy_self();
</span><span class="cx">         }
</span><span class="cx">         else{
</span><del>-            __replace_construct_helper::__op_table&lt;variant&gt;::__move_assign[
</del><ins>+            __replace_construct_helper::__op_table&lt;Variant&gt;::__move_assign[
</ins><span class="cx">                 __other.index()](this,__other);
</span><span class="cx">         }
</span><span class="cx">         return *this;
</span><span class="lines">@@ -1708,14 +1707,14 @@
</span><span class="cx">         typename std::conditional&lt;
</span><span class="cx">             __all_swappable&lt;_Types...&gt;::value &amp;&amp;
</span><span class="cx">                 __all_move_constructible&lt;_Types...&gt;::value,
</span><del>-            variant, __private_type&gt;::type
</del><ins>+            Variant, __private_type&gt;::type
</ins><span class="cx">             &amp;__other) __NOEXCEPT_(__noexcept_variant_swap&lt;_Types...&gt;::value) {
</span><span class="cx">         if (__other.index() == index()) {
</span><span class="cx">             if(!valueless_by_exception())
</span><del>-                __swap_op_table&lt;variant&gt;::__apply[index()](*this,__other);
</del><ins>+                __swap_op_table&lt;Variant&gt;::__apply[index()](*this,__other);
</ins><span class="cx">         }
</span><span class="cx">         else{
</span><del>-            variant __temp(std::move(__other));
</del><ins>+            Variant __temp(std::move(__other));
</ins><span class="cx">             __other.__index=__other.__move_construct(*this);
</span><span class="cx">             __index=__move_construct(__temp);
</span><span class="cx">         }
</span><span class="lines">@@ -1723,9 +1722,9 @@
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> template&lt;&gt;
</span><del>-class variant&lt;&gt;{
</del><ins>+class Variant&lt;&gt;{
</ins><span class="cx"> public:
</span><del>-    variant()=delete;
</del><ins>+    Variant()=delete;
</ins><span class="cx">     
</span><span class="cx">     constexpr bool valueless_by_exception() const __NOEXCEPT{
</span><span class="cx">         return true;
</span><span class="lines">@@ -1734,7 +1733,7 @@
</span><span class="cx">         return -1;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void swap(variant&amp;){}
</del><ins>+    void swap(Variant&amp;){}
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> template &lt;typename... _Types&gt;
</span><span class="lines">@@ -1741,7 +1740,7 @@
</span><span class="cx"> typename std::enable_if&lt;__all_swappable&lt;_Types...&gt;::value &amp;&amp;
</span><span class="cx">                             __all_move_constructible&lt;_Types...&gt;::value,
</span><span class="cx">                         void&gt;::type
</span><del>-swap(variant&lt;_Types...&gt; &amp;__lhs, variant&lt;_Types...&gt; &amp;__rhs) __NOEXCEPT_(
</del><ins>+swap(Variant&lt;_Types...&gt; &amp;__lhs, Variant&lt;_Types...&gt; &amp;__rhs) __NOEXCEPT_(
</ins><span class="cx">     __noexcept_variant_swap&lt;_Types...&gt;::value) {
</span><span class="cx">     __lhs.swap(__rhs);
</span><span class="cx"> }
</span><span class="lines">@@ -1749,85 +1748,85 @@
</span><span class="cx"> template&lt;ptrdiff_t _Index,typename ... _Types&gt;
</span><span class="cx"> struct __variant_accessor{
</span><span class="cx">     typedef typename __indexed_type&lt;_Index,_Types...&gt;::__type __type;
</span><del>-    static constexpr __type&amp; get(variant&lt;_Types...&gt;&amp; __v){
</del><ins>+    static constexpr __type&amp; get(Variant&lt;_Types...&gt;&amp; __v){
</ins><span class="cx">         return __v.__storage.__get(in_place&lt;_Index&gt;);
</span><span class="cx">     }
</span><del>-    static constexpr __type const&amp; get(variant&lt;_Types...&gt; const&amp; __v){
</del><ins>+    static constexpr __type const&amp; get(Variant&lt;_Types...&gt; const&amp; __v){
</ins><span class="cx">         return __v.__storage.__get(in_place&lt;_Index&gt;);
</span><span class="cx">     }
</span><del>-    static constexpr __type&amp;&amp; get(variant&lt;_Types...&gt;&amp;&amp; __v){
</del><ins>+    static constexpr __type&amp;&amp; get(Variant&lt;_Types...&gt;&amp;&amp; __v){
</ins><span class="cx">         return __v.__storage.__get_rref(in_place&lt;_Index&gt;);
</span><span class="cx">     }
</span><del>-    static constexpr const __type&amp;&amp; get(variant&lt;_Types...&gt; const&amp;&amp; __v){
</del><ins>+    static constexpr const __type&amp;&amp; get(Variant&lt;_Types...&gt; const&amp;&amp; __v){
</ins><span class="cx">         return __v.__storage.__get_rref(in_place&lt;_Index&gt;);
</span><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> template&lt;typename _Type,typename ... _Types&gt;
</span><del>-constexpr _Type&amp; get(variant&lt;_Types...&gt;&amp; __v){
</del><ins>+constexpr _Type&amp; get(Variant&lt;_Types...&gt;&amp; __v){
</ins><span class="cx">     return get&lt;__type_index&lt;_Type,_Types...&gt;::__value&gt;(__v);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template&lt;typename _Type,typename ... _Types&gt;
</span><del>-constexpr _Type&amp;&amp; get(variant&lt;_Types...&gt;&amp;&amp; __v){
</del><ins>+constexpr _Type&amp;&amp; get(Variant&lt;_Types...&gt;&amp;&amp; __v){
</ins><span class="cx">     return get&lt;__type_index&lt;_Type,_Types...&gt;::__value&gt;(std::move(__v));
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template&lt;typename _Type,typename ... _Types&gt;
</span><del>-constexpr _Type const&amp; get(variant&lt;_Types...&gt; const&amp; __v){
</del><ins>+constexpr _Type const&amp; get(Variant&lt;_Types...&gt; const&amp; __v){
</ins><span class="cx">     return get&lt;__type_index&lt;_Type,_Types...&gt;::__value&gt;(__v);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template&lt;typename _Type,typename ... _Types&gt;
</span><del>-constexpr const _Type&amp;&amp; get(variant&lt;_Types...&gt; const&amp;&amp; __v){
</del><ins>+constexpr const _Type&amp;&amp; get(Variant&lt;_Types...&gt; const&amp;&amp; __v){
</ins><span class="cx">     return get&lt;__type_index&lt;_Type,_Types...&gt;::__value&gt;(std::move(__v));
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> template&lt;ptrdiff_t _Index,typename ... _Types&gt;
</span><del>-constexpr typename __indexed_type&lt;_Index,_Types...&gt;::__type const&amp; get(variant&lt;_Types...&gt; const&amp; __v){
</del><ins>+constexpr typename __indexed_type&lt;_Index,_Types...&gt;::__type const&amp; get(Variant&lt;_Types...&gt; const&amp; __v){
</ins><span class="cx">     return *(
</span><span class="cx">         (_Index!=__v.index())
</span><del>-            ? &amp;__throw_bad_variant_access&lt;typename __indexed_type&lt;_Index,_Types...&gt;::__type const&amp;&gt;(&quot;Bad variant index in get&quot;)
</del><ins>+            ? &amp;__throw_bad_variant_access&lt;typename __indexed_type&lt;_Index,_Types...&gt;::__type const&amp;&gt;(&quot;Bad Variant index in get&quot;)
</ins><span class="cx">             : &amp;__variant_accessor&lt;_Index,_Types...&gt;::get(__v)
</span><span class="cx">     );
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template&lt;ptrdiff_t _Index,typename ... _Types&gt;
</span><del>-constexpr typename __indexed_type&lt;_Index,_Types...&gt;::__type&amp; get(variant&lt;_Types...&gt;&amp; __v){
</del><ins>+constexpr typename __indexed_type&lt;_Index,_Types...&gt;::__type&amp; get(Variant&lt;_Types...&gt;&amp; __v){
</ins><span class="cx">     return *(
</span><span class="cx">         (_Index!=__v.index())
</span><del>-            ? &amp;__throw_bad_variant_access&lt;typename __indexed_type&lt;_Index,_Types...&gt;::__type&amp;&gt;(&quot;Bad variant index in get&quot;)
</del><ins>+            ? &amp;__throw_bad_variant_access&lt;typename __indexed_type&lt;_Index,_Types...&gt;::__type&amp;&gt;(&quot;Bad Variant index in get&quot;)
</ins><span class="cx">             : &amp;__variant_accessor&lt;_Index,_Types...&gt;::get(__v)
</span><span class="cx">     );
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template&lt;ptrdiff_t _Index,typename ... _Types&gt;
</span><del>-constexpr typename __indexed_type&lt;_Index,_Types...&gt;::__type&amp;&amp; get(variant&lt;_Types...&gt;&amp;&amp; __v){
</del><ins>+constexpr typename __indexed_type&lt;_Index,_Types...&gt;::__type&amp;&amp; get(Variant&lt;_Types...&gt;&amp;&amp; __v){
</ins><span class="cx">     return __variant_accessor&lt;_Index,_Types...&gt;::get(
</span><del>-        (((_Index!=__v.index()) ? __throw_bad_variant_access&lt;int&gt;(&quot;Bad variant index in get&quot;) : 0), std::move(__v))
</del><ins>+        (((_Index!=__v.index()) ? __throw_bad_variant_access&lt;int&gt;(&quot;Bad Variant index in get&quot;) : 0), std::move(__v))
</ins><span class="cx">     );
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template&lt;ptrdiff_t _Index,typename ... _Types&gt;
</span><del>-constexpr const typename __indexed_type&lt;_Index,_Types...&gt;::__type&amp;&amp; get(variant&lt;_Types...&gt; const&amp;&amp; __v){
</del><ins>+constexpr const typename __indexed_type&lt;_Index,_Types...&gt;::__type&amp;&amp; get(Variant&lt;_Types...&gt; const&amp;&amp; __v){
</ins><span class="cx">     return __variant_accessor&lt;_Index,_Types...&gt;::get(
</span><del>-        (((_Index!=__v.index()) ? __throw_bad_variant_access&lt;int&gt;(&quot;Bad variant index in get&quot;) : 0), std::move(__v))
</del><ins>+        (((_Index!=__v.index()) ? __throw_bad_variant_access&lt;int&gt;(&quot;Bad Variant index in get&quot;) : 0), std::move(__v))
</ins><span class="cx">     );
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template&lt;typename _Type,typename ... _Types&gt;
</span><del>-constexpr std::add_pointer_t&lt;_Type&gt; get_if(variant&lt;_Types...&gt;&amp; __v){
</del><ins>+constexpr std::add_pointer_t&lt;_Type&gt; get_if(Variant&lt;_Types...&gt;&amp; __v){
</ins><span class="cx">     return (__type_index&lt;_Type,_Types...&gt;::__value!=__v.index())?nullptr:&amp;get&lt;_Type&gt;(__v);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template&lt;typename _Type,typename ... _Types&gt;
</span><del>-constexpr std::add_pointer_t&lt;_Type const&gt; get_if(variant&lt;_Types...&gt; const&amp; __v){
</del><ins>+constexpr std::add_pointer_t&lt;_Type const&gt; get_if(Variant&lt;_Types...&gt; const&amp; __v){
</ins><span class="cx">     return (__type_index&lt;_Type,_Types...&gt;::__value!=__v.index())?nullptr:&amp;get&lt;_Type&gt;(__v);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template&lt;ptrdiff_t _Index,typename ... _Types&gt;
</span><del>-constexpr std::add_pointer_t&lt;typename __indexed_type&lt;_Index,_Types...&gt;::__type&gt; get_if(variant&lt;_Types...&gt;&amp; __v){
</del><ins>+constexpr std::add_pointer_t&lt;typename __indexed_type&lt;_Index,_Types...&gt;::__type&gt; get_if(Variant&lt;_Types...&gt;&amp; __v){
</ins><span class="cx">     return ((_Index!=__v.index())?nullptr:
</span><span class="cx">         &amp;__variant_accessor&lt;_Index,_Types...&gt;::get(__v));
</span><span class="cx"> }
</span><span class="lines">@@ -1834,13 +1833,13 @@
</span><span class="cx"> 
</span><span class="cx"> template&lt;ptrdiff_t _Index,typename ... _Types&gt;
</span><span class="cx"> constexpr std::add_pointer_t&lt;typename __indexed_type&lt;_Index,_Types...&gt;::__type const&gt; get_if(
</span><del>-    variant&lt;_Types...&gt; const&amp; __v){
</del><ins>+    Variant&lt;_Types...&gt; const&amp; __v){
</ins><span class="cx">     return ((_Index!=__v.index())?nullptr:
</span><span class="cx">         &amp;__variant_accessor&lt;_Index,_Types...&gt;::get(__v));
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template&lt;typename _Type,typename ... _Types&gt;
</span><del>-constexpr bool holds_alternative(variant&lt;_Types...&gt; const&amp; __v) __NOEXCEPT{
</del><ins>+constexpr bool holds_alternative(Variant&lt;_Types...&gt; const&amp; __v) __NOEXCEPT{
</ins><span class="cx">     return __v.index()==__type_index&lt;_Type,_Types...&gt;::__value;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -1859,7 +1858,7 @@
</span><span class="cx"> 
</span><span class="cx"> template&lt;typename _Visitor,typename ... _Types&gt;
</span><span class="cx"> struct __visitor_table{
</span><del>-    typedef variant&lt;_Types...&gt; __variant_type;
</del><ins>+    typedef Variant&lt;_Types...&gt; __variant_type;
</ins><span class="cx">     typedef typename __visitor_return_type&lt;_Visitor,_Types...&gt;::__type __return_type;
</span><span class="cx">     typedef __return_type (*__func_type)(_Visitor&amp;,__variant_type&amp;);
</span><span class="cx"> 
</span><span class="lines">@@ -1878,9 +1877,9 @@
</span><span class="cx"> 
</span><span class="cx"> template&lt;typename _Visitor,typename ... _Types&gt;
</span><span class="cx"> constexpr typename __visitor_return_type&lt;_Visitor,_Types...&gt;::__type
</span><del>-visit(_Visitor&amp;&amp; __visitor,variant&lt;_Types...&gt;&amp; __v){
</del><ins>+visit(_Visitor&amp;&amp; __visitor,Variant&lt;_Types...&gt;&amp; __v){
</ins><span class="cx">     return (__v.valueless_by_exception())
</span><del>-        ? __throw_bad_variant_access&lt;typename __visitor_return_type&lt;_Visitor,_Types...&gt;::__type&gt;(&quot;Visiting of empty variant&quot;)
</del><ins>+        ? __throw_bad_variant_access&lt;typename __visitor_return_type&lt;_Visitor,_Types...&gt;::__type&gt;(&quot;Visiting of empty Variant&quot;)
</ins><span class="cx">         : __visitor_table&lt;_Visitor,_Types...&gt;::__trampoline[__v.index()](__visitor,__v);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -1944,7 +1943,7 @@
</span><span class="cx">     template&lt;typename _Visitor,typename ... _Variants&gt;
</span><span class="cx">     static constexpr typename __multi_visitor_return_type&lt;_Visitor,_Variants...&gt;::__type
</span><span class="cx">     __visit(_Visitor&amp;,_Variants&amp;&amp; ...){
</span><del>-        return __throw_bad_variant_access&lt;typename __multi_visitor_return_type&lt;_Visitor,_Variants...&gt;::__type&gt;(&quot;Visiting of empty variant&quot;);
</del><ins>+        return __throw_bad_variant_access&lt;typename __multi_visitor_return_type&lt;_Visitor,_Variants...&gt;::__type&gt;(&quot;Visiting of empty Variant&quot;);
</ins><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="lines">@@ -1952,7 +1951,7 @@
</span><span class="cx"> struct __variant_type_count;
</span><span class="cx"> 
</span><span class="cx"> template&lt;typename ... _Types&gt;
</span><del>-struct __variant_type_count&lt;variant&lt;_Types...&gt;&gt;{
</del><ins>+struct __variant_type_count&lt;Variant&lt;_Types...&gt;&gt;{
</ins><span class="cx">     static constexpr size_t __value=sizeof...(_Types);
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="lines">@@ -1989,50 +1988,50 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template&lt;typename ... _Types&gt;
</span><del>-constexpr bool operator==(variant&lt;_Types...&gt; const&amp; __lhs,variant&lt;_Types...&gt; const&amp; __rhs){
</del><ins>+constexpr bool operator==(Variant&lt;_Types...&gt; const&amp; __lhs,Variant&lt;_Types...&gt; const&amp; __rhs){
</ins><span class="cx">     return (__lhs.index()==__rhs.index()) &amp;&amp;
</span><span class="cx">         ((__lhs.index()==-1) ||
</span><del>-         __equality_op_table&lt;variant&lt;_Types...&gt;&gt;::__equality_compare[__lhs.index()](
</del><ins>+         __equality_op_table&lt;Variant&lt;_Types...&gt;&gt;::__equality_compare[__lhs.index()](
</ins><span class="cx">              __lhs,__rhs));
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template&lt;typename ... _Types&gt;
</span><del>-constexpr bool operator!=(variant&lt;_Types...&gt; const&amp; __lhs,variant&lt;_Types...&gt; const&amp; __rhs){
</del><ins>+constexpr bool operator!=(Variant&lt;_Types...&gt; const&amp; __lhs,Variant&lt;_Types...&gt; const&amp; __rhs){
</ins><span class="cx">     return !(__lhs==__rhs);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template&lt;typename ... _Types&gt;
</span><del>-constexpr bool operator&lt;(variant&lt;_Types...&gt; const&amp; __lhs,variant&lt;_Types...&gt; const&amp; __rhs){
</del><ins>+constexpr bool operator&lt;(Variant&lt;_Types...&gt; const&amp; __lhs,Variant&lt;_Types...&gt; const&amp; __rhs){
</ins><span class="cx">     return (__lhs.index()&lt;__rhs.index()) ||
</span><span class="cx">         ((__lhs.index()==__rhs.index()) &amp;&amp;
</span><span class="cx">          ((__lhs.index()!=-1) &amp;&amp;
</span><del>-          __less_than_op_table&lt;variant&lt;_Types...&gt;&gt;::
</del><ins>+          __less_than_op_table&lt;Variant&lt;_Types...&gt;&gt;::
</ins><span class="cx">           __less_than_compare[__lhs.index()](__lhs,__rhs)));
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template&lt;typename ... _Types&gt;
</span><del>-constexpr bool operator&gt;(variant&lt;_Types...&gt; const&amp; __lhs,variant&lt;_Types...&gt; const&amp; __rhs){
</del><ins>+constexpr bool operator&gt;(Variant&lt;_Types...&gt; const&amp; __lhs,Variant&lt;_Types...&gt; const&amp; __rhs){
</ins><span class="cx">     return __rhs&lt;__lhs;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template&lt;typename ... _Types&gt;
</span><del>-constexpr bool operator&gt;=(variant&lt;_Types...&gt; const&amp; __lhs,variant&lt;_Types...&gt; const&amp; __rhs){
</del><ins>+constexpr bool operator&gt;=(Variant&lt;_Types...&gt; const&amp; __lhs,Variant&lt;_Types...&gt; const&amp; __rhs){
</ins><span class="cx">     return !(__lhs&lt;__rhs);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template&lt;typename ... _Types&gt;
</span><del>-constexpr bool operator&lt;=(variant&lt;_Types...&gt; const&amp; __lhs,variant&lt;_Types...&gt; const&amp; __rhs){
</del><ins>+constexpr bool operator&lt;=(Variant&lt;_Types...&gt; const&amp; __lhs,Variant&lt;_Types...&gt; const&amp; __rhs){
</ins><span class="cx">     return !(__lhs&gt;__rhs);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-struct monostate{};
</del><ins>+struct Monostate{};
</ins><span class="cx"> 
</span><del>-constexpr inline bool operator==(monostate const&amp;,monostate const&amp;){ return true;}
-constexpr inline bool operator!=(monostate const&amp;,monostate const&amp;){ return false;}
-constexpr inline bool operator&gt;=(monostate const&amp;,monostate const&amp;){ return true;}
-constexpr inline bool operator&lt;=(monostate const&amp;,monostate const&amp;){ return true;}
-constexpr inline bool operator&gt;(monostate const&amp;,monostate const&amp;){ return false;}
-constexpr inline bool operator&lt;(monostate const&amp;,monostate const&amp;){ return false;}
</del><ins>+constexpr inline bool operator==(Monostate const&amp;,Monostate const&amp;){ return true;}
+constexpr inline bool operator!=(Monostate const&amp;,Monostate const&amp;){ return false;}
+constexpr inline bool operator&gt;=(Monostate const&amp;,Monostate const&amp;){ return true;}
+constexpr inline bool operator&lt;=(Monostate const&amp;,Monostate const&amp;){ return true;}
+constexpr inline bool operator&gt;(Monostate const&amp;,Monostate const&amp;){ return false;}
+constexpr inline bool operator&lt;(Monostate const&amp;,Monostate const&amp;){ return false;}
</ins><span class="cx"> 
</span><span class="cx"> struct __hash_visitor{
</span><span class="cx">     template&lt;typename _Type&gt;
</span><span class="lines">@@ -2041,25 +2040,29 @@
</span><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-} // namespace experimental
</del><ins>+} // namespace WTF
</ins><span class="cx"> 
</span><ins>+namespace std {
+
</ins><span class="cx"> template&lt;&gt;
</span><del>-struct hash&lt;experimental::monostate&gt;{
-    size_t operator()(experimental::monostate) __NOEXCEPT{
</del><ins>+struct hash&lt;WTF::Monostate&gt;{
+    size_t operator()(WTF::Monostate) __NOEXCEPT{
</ins><span class="cx">         return 42;
</span><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> template&lt;typename ... _Types&gt;
</span><del>-struct hash&lt;experimental::variant&lt;_Types...&gt;&gt;{
-    size_t operator()(experimental::variant&lt;_Types...&gt; const &amp;v) __NOEXCEPT {
-        return std::hash&lt;ptrdiff_t&gt;()(v.index()) ^
-               experimental::visit(experimental::__hash_visitor(), v);
</del><ins>+struct hash&lt;WTF::Variant&lt;_Types...&gt;&gt;{
+    size_t operator()(WTF::Variant&lt;_Types...&gt; const &amp;v) __NOEXCEPT {
+        return std::hash&lt;ptrdiff_t&gt;()(v.index()) ^ WTF::visit(WTF::__hash_visitor(), v);
</ins><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace std
</span><span class="cx"> 
</span><ins>+using WTF::Monostate;
+using WTF::Variant;
+
</ins><span class="cx"> #endif // !COMPILER(CLANG) || WTF_CPP_STD_VER &gt;= 14
</span><span class="cx"> 
</span><span class="cx"> #if COMPILER(MSVC)
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (207516 => 207517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-10-19 02:33:49 UTC (rev 207516)
+++ trunk/Source/WebCore/ChangeLog        2016-10-19 02:43:44 UTC (rev 207517)
</span><span class="lines">@@ -1,3 +1,46 @@
</span><ins>+2016-10-18  Sam Weinig  &lt;sam@webkit.org&gt;
+
+        Replace std::experimental::variant with WTF::Variant (or similar)
+        https://bugs.webkit.org/show_bug.cgi?id=163626
+
+        Reviewed by Chris Dumez.
+
+        Rename std::experimental::variant, Variant. Move helpers get/holds_alternative/etc.
+        into the WTF namespace.
+
+        * Modules/fetch/FetchBody.h:
+        (WebCore::FetchBody::isBlob):
+        (WebCore::FetchBody::isFormData):
+        (WebCore::FetchBody::isArrayBuffer):
+        (WebCore::FetchBody::isArrayBufferView):
+        (WebCore::FetchBody::isURLSearchParams):
+        (WebCore::FetchBody::isText):
+        (WebCore::FetchBody::blobBody):
+        (WebCore::FetchBody::formDataBody):
+        (WebCore::FetchBody::arrayBufferBody):
+        (WebCore::FetchBody::arrayBufferViewBody):
+        (WebCore::FetchBody::textBody):
+        (WebCore::FetchBody::urlSearchParamsBody):
+        * bindings/generic/IDLTypes.h:
+        * dom/ExceptionOr.h:
+        (WebCore::ExceptionOr&lt;ReturnType&gt;::hasException):
+        (WebCore::ExceptionOr&lt;ReturnType&gt;::releaseException):
+        (WebCore::ExceptionOr&lt;ReturnType&gt;::releaseReturnValue):
+        * dom/MessageEvent.cpp:
+        (WebCore::MessageEvent::source):
+        * dom/MessageEvent.h:
+        * dom/Node.cpp:
+        (WebCore::nodeSetPreTransformedFromNodeOrStringVector):
+        (WebCore::Node::convertNodesOrStringsIntoNode):
+        * dom/Node.h:
+        * html/HTMLOptionsCollection.h:
+        * html/HTMLSelectElement.cpp:
+        (WebCore::HTMLSelectElement::add):
+        * html/HTMLSelectElement.h:
+        * html/track/TrackEvent.cpp:
+        (WebCore::TrackEvent::TrackEvent):
+        * html/track/TrackEvent.h:
+
</ins><span class="cx"> 2016-10-18  Chris Dumez  &lt;cdumez@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Unreviewed, rebaseline bindings tests after Sam's r207505.
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesfetchFetchBodyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/fetch/FetchBody.h (207516 => 207517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/fetch/FetchBody.h        2016-10-19 02:33:49 UTC (rev 207516)
+++ trunk/Source/WebCore/Modules/fetch/FetchBody.h        2016-10-19 02:43:44 UTC (rev 207517)
</span><span class="lines">@@ -65,12 +65,12 @@
</span><span class="cx">     void consumeAsStream(FetchBodyOwner&amp;, FetchResponseSource&amp;);
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-    bool isBlob() const { return std::experimental::holds_alternative&lt;Ref&lt;const Blob&gt;&gt;(m_data); }
-    bool isFormData() const { return std::experimental::holds_alternative&lt;Ref&lt;FormData&gt;&gt;(m_data); }
-    bool isArrayBuffer() const { return std::experimental::holds_alternative&lt;Ref&lt;const ArrayBuffer&gt;&gt;(m_data); }
-    bool isArrayBufferView() const { return std::experimental::holds_alternative&lt;Ref&lt;const ArrayBufferView&gt;&gt;(m_data); }
-    bool isURLSearchParams() const { return std::experimental::holds_alternative&lt;Ref&lt;const URLSearchParams&gt;&gt;(m_data); }
-    bool isText() const { return std::experimental::holds_alternative&lt;String&gt;(m_data); }
</del><ins>+    bool isBlob() const { return WTF::holds_alternative&lt;Ref&lt;const Blob&gt;&gt;(m_data); }
+    bool isFormData() const { return WTF::holds_alternative&lt;Ref&lt;FormData&gt;&gt;(m_data); }
+    bool isArrayBuffer() const { return WTF::holds_alternative&lt;Ref&lt;const ArrayBuffer&gt;&gt;(m_data); }
+    bool isArrayBufferView() const { return WTF::holds_alternative&lt;Ref&lt;const ArrayBufferView&gt;&gt;(m_data); }
+    bool isURLSearchParams() const { return WTF::holds_alternative&lt;Ref&lt;const URLSearchParams&gt;&gt;(m_data); }
+    bool isText() const { return WTF::holds_alternative&lt;String&gt;(m_data); }
</ins><span class="cx"> 
</span><span class="cx">     static Optional&lt;FetchBody&gt; extract(ScriptExecutionContext&amp;, JSC::ExecState&amp;, JSC::JSValue, String&amp;);
</span><span class="cx">     static FetchBody loadingBody() { return { }; }
</span><span class="lines">@@ -104,16 +104,16 @@
</span><span class="cx">     void consumeText(Ref&lt;DeferredPromise&gt;&amp;&amp;, const String&amp;);
</span><span class="cx">     void consumeBlob(FetchBodyOwner&amp;, Ref&lt;DeferredPromise&gt;&amp;&amp;);
</span><span class="cx"> 
</span><del>-    const Blob&amp; blobBody() const { return std::experimental::get&lt;Ref&lt;const Blob&gt;&gt;(m_data).get(); }
-    FormData&amp; formDataBody() { return std::experimental::get&lt;Ref&lt;FormData&gt;&gt;(m_data).get(); }
-    const FormData&amp; formDataBody() const { return std::experimental::get&lt;Ref&lt;FormData&gt;&gt;(m_data).get(); }
-    const ArrayBuffer&amp; arrayBufferBody() const { return std::experimental::get&lt;Ref&lt;const ArrayBuffer&gt;&gt;(m_data).get(); }
-    const ArrayBufferView&amp; arrayBufferViewBody() const { return std::experimental::get&lt;Ref&lt;const ArrayBufferView&gt;&gt;(m_data).get(); }
-    String&amp; textBody() { return std::experimental::get&lt;String&gt;(m_data); }
-    const String&amp; textBody() const { return std::experimental::get&lt;String&gt;(m_data); }
-    const URLSearchParams&amp; urlSearchParamsBody() const { return std::experimental::get&lt;Ref&lt;const URLSearchParams&gt;&gt;(m_data).get(); }
</del><ins>+    const Blob&amp; blobBody() const { return WTF::get&lt;Ref&lt;const Blob&gt;&gt;(m_data).get(); }
+    FormData&amp; formDataBody() { return WTF::get&lt;Ref&lt;FormData&gt;&gt;(m_data).get(); }
+    const FormData&amp; formDataBody() const { return WTF::get&lt;Ref&lt;FormData&gt;&gt;(m_data).get(); }
+    const ArrayBuffer&amp; arrayBufferBody() const { return WTF::get&lt;Ref&lt;const ArrayBuffer&gt;&gt;(m_data).get(); }
+    const ArrayBufferView&amp; arrayBufferViewBody() const { return WTF::get&lt;Ref&lt;const ArrayBufferView&gt;&gt;(m_data).get(); }
+    String&amp; textBody() { return WTF::get&lt;String&gt;(m_data); }
+    const String&amp; textBody() const { return WTF::get&lt;String&gt;(m_data); }
+    const URLSearchParams&amp; urlSearchParamsBody() const { return WTF::get&lt;Ref&lt;const URLSearchParams&gt;&gt;(m_data).get(); }
</ins><span class="cx"> 
</span><del>-    std::experimental::variant&lt;std::nullptr_t, Ref&lt;const Blob&gt;, Ref&lt;FormData&gt;, Ref&lt;const ArrayBuffer&gt;, Ref&lt;const ArrayBufferView&gt;, Ref&lt;const URLSearchParams&gt;, String&gt; m_data { nullptr };
</del><ins>+    Variant&lt;std::nullptr_t, Ref&lt;const Blob&gt;, Ref&lt;FormData&gt;, Ref&lt;const ArrayBuffer&gt;, Ref&lt;const ArrayBufferView&gt;, Ref&lt;const URLSearchParams&gt;, String&gt; m_data { nullptr };
</ins><span class="cx"> 
</span><span class="cx">     FetchBodyConsumer m_consumer { FetchBodyConsumer::Type::None };
</span><span class="cx">     RefPtr&lt;DeferredPromise&gt; m_consumePromise;
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsgenericIDLTypesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/generic/IDLTypes.h (207516 => 207517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/generic/IDLTypes.h        2016-10-19 02:33:49 UTC (rev 207516)
+++ trunk/Source/WebCore/bindings/generic/IDLTypes.h        2016-10-19 02:43:44 UTC (rev 207517)
</span><span class="lines">@@ -115,7 +115,7 @@
</span><span class="cx"> struct IDLDOMException : IDLUnsupportedType { };
</span><span class="cx"> 
</span><span class="cx"> template&lt;typename... Ts&gt;
</span><del>-struct IDLUnion : IDLType&lt;std::experimental::variant&lt;typename Ts::ImplementationType...&gt;&gt; {
</del><ins>+struct IDLUnion : IDLType&lt;Variant&lt;typename Ts::ImplementationType...&gt;&gt; {
</ins><span class="cx">     using TypeList = brigand::list&lt;Ts...&gt;;
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoredomExceptionOrh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/ExceptionOr.h (207516 => 207517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/ExceptionOr.h        2016-10-19 02:33:49 UTC (rev 207516)
+++ trunk/Source/WebCore/dom/ExceptionOr.h        2016-10-19 02:43:44 UTC (rev 207517)
</span><span class="lines">@@ -43,7 +43,7 @@
</span><span class="cx">     ReturnType&amp;&amp; releaseReturnValue();
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    std::experimental::variant&lt;Exception, ReturnType&gt; m_value;
</del><ins>+    Variant&lt;Exception, ReturnType&gt; m_value;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> template&lt;&gt; class ExceptionOr&lt;void&gt; {
</span><span class="lines">@@ -75,17 +75,17 @@
</span><span class="cx"> 
</span><span class="cx"> template&lt;typename ReturnType&gt; inline bool ExceptionOr&lt;ReturnType&gt;::hasException() const
</span><span class="cx"> {
</span><del>-    return std::experimental::holds_alternative&lt;Exception&gt;(m_value);
</del><ins>+    return WTF::holds_alternative&lt;Exception&gt;(m_value);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template&lt;typename ReturnType&gt; inline Exception&amp;&amp; ExceptionOr&lt;ReturnType&gt;::releaseException()
</span><span class="cx"> {
</span><del>-    return std::experimental::get&lt;Exception&gt;(WTFMove(m_value));
</del><ins>+    return WTF::get&lt;Exception&gt;(WTFMove(m_value));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template&lt;typename ReturnType&gt; inline ReturnType&amp;&amp; ExceptionOr&lt;ReturnType&gt;::releaseReturnValue()
</span><span class="cx"> {
</span><del>-    return std::experimental::get&lt;ReturnType&gt;(WTFMove(m_value));
</del><ins>+    return WTF::get&lt;ReturnType&gt;(WTFMove(m_value));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> inline ExceptionOr&lt;void&gt;::ExceptionOr(Exception&amp;&amp; exception)
</span></span></pre></div>
<a id="trunkSourceWebCoredomMessageEventcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/MessageEvent.cpp (207516 => 207517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/MessageEvent.cpp        2016-10-19 02:33:49 UTC (rev 207516)
+++ trunk/Source/WebCore/dom/MessageEvent.cpp        2016-10-19 02:43:44 UTC (rev 207517)
</span><span class="lines">@@ -177,7 +177,7 @@
</span><span class="cx">         [](const RefPtr&lt;MessagePort&gt;&amp; messagePort) -&gt; EventTarget* { return const_cast&lt;EventTarget*&gt;(static_cast&lt;const EventTarget*&gt;(messagePort.get())); }
</span><span class="cx">     );
</span><span class="cx"> 
</span><del>-    return std::experimental::visit(visitor, m_source.value());
</del><ins>+    return WTF::visit(visitor, m_source.value());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> RefPtr&lt;SerializedScriptValue&gt; MessageEvent::trySerializeData(ExecState* exec)
</span></span></pre></div>
<a id="trunkSourceWebCoredomMessageEventh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/MessageEvent.h (207516 => 207517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/MessageEvent.h        2016-10-19 02:33:49 UTC (rev 207516)
+++ trunk/Source/WebCore/dom/MessageEvent.h        2016-10-19 02:43:44 UTC (rev 207517)
</span><span class="lines">@@ -38,7 +38,7 @@
</span><span class="cx"> 
</span><span class="cx"> class Blob;
</span><span class="cx"> 
</span><del>-using MessageEventSource = std::experimental::variant&lt;RefPtr&lt;DOMWindow&gt;, RefPtr&lt;MessagePort&gt;&gt;;
</del><ins>+using MessageEventSource = Variant&lt;RefPtr&lt;DOMWindow&gt;, RefPtr&lt;MessagePort&gt;&gt;;
</ins><span class="cx"> 
</span><span class="cx"> class MessageEvent final : public Event {
</span><span class="cx"> public:
</span></span></pre></div>
<a id="trunkSourceWebCoredomNodecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/Node.cpp (207516 => 207517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/Node.cpp        2016-10-19 02:33:49 UTC (rev 207516)
+++ trunk/Source/WebCore/dom/Node.cpp        2016-10-19 02:43:44 UTC (rev 207517)
</span><span class="lines">@@ -445,7 +445,7 @@
</span><span class="cx">     );
</span><span class="cx"> 
</span><span class="cx">     for (const auto&amp; variant : vector)
</span><del>-        std::experimental::visit(visitor, variant);
</del><ins>+        WTF::visit(visitor, variant);
</ins><span class="cx"> 
</span><span class="cx">     return nodeSet;
</span><span class="cx"> }
</span><span class="lines">@@ -482,7 +482,7 @@
</span><span class="cx">     );
</span><span class="cx"> 
</span><span class="cx">     for (auto&amp; variant : nodeOrStringVector)
</span><del>-        std::experimental::visit(visitor, variant);
</del><ins>+        WTF::visit(visitor, variant);
</ins><span class="cx"> 
</span><span class="cx">     if (nodes.size() == 1)
</span><span class="cx">         return WTFMove(nodes.first());
</span></span></pre></div>
<a id="trunkSourceWebCoredomNodeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/Node.h (207516 => 207517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/Node.h        2016-10-19 02:33:49 UTC (rev 207516)
+++ trunk/Source/WebCore/dom/Node.h        2016-10-19 02:43:44 UTC (rev 207517)
</span><span class="lines">@@ -62,7 +62,7 @@
</span><span class="cx"> class TouchEvent;
</span><span class="cx"> class UIRequestEvent;
</span><span class="cx"> 
</span><del>-using NodeOrString = std::experimental::variant&lt;RefPtr&lt;Node&gt;, String&gt;;
</del><ins>+using NodeOrString = Variant&lt;RefPtr&lt;Node&gt;, String&gt;;
</ins><span class="cx"> 
</span><span class="cx"> class NodeRareDataBase {
</span><span class="cx"> public:
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLOptionsCollectionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLOptionsCollection.h (207516 => 207517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLOptionsCollection.h        2016-10-19 02:33:49 UTC (rev 207516)
+++ trunk/Source/WebCore/html/HTMLOptionsCollection.h        2016-10-19 02:43:44 UTC (rev 207517)
</span><span class="lines">@@ -41,8 +41,8 @@
</span><span class="cx">     HTMLOptionElement* item(unsigned offset) const final;
</span><span class="cx">     HTMLOptionElement* namedItem(const AtomicString&amp; name) const final;
</span><span class="cx"> 
</span><del>-    using OptionOrOptGroupElement = std::experimental::variant&lt;RefPtr&lt;HTMLOptionElement&gt;, RefPtr&lt;HTMLOptGroupElement&gt;&gt;;
-    using HTMLElementOrInt = std::experimental::variant&lt;RefPtr&lt;HTMLElement&gt;, int&gt;;
</del><ins>+    using OptionOrOptGroupElement = Variant&lt;RefPtr&lt;HTMLOptionElement&gt;, RefPtr&lt;HTMLOptGroupElement&gt;&gt;;
+    using HTMLElementOrInt = Variant&lt;RefPtr&lt;HTMLElement&gt;, int&gt;;
</ins><span class="cx">     WEBCORE_EXPORT ExceptionOr&lt;void&gt; add(const OptionOrOptGroupElement&amp;, Optional&lt;HTMLElementOrInt&gt; before);
</span><span class="cx">     WEBCORE_EXPORT void remove(int index);
</span><span class="cx">     void remove(HTMLOptionElement&amp;);
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLSelectElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLSelectElement.cpp (207516 => 207517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLSelectElement.cpp        2016-10-19 02:33:49 UTC (rev 207516)
+++ trunk/Source/WebCore/html/HTMLSelectElement.cpp        2016-10-19 02:43:44 UTC (rev 207517)
</span><span class="lines">@@ -230,9 +230,9 @@
</span><span class="cx">             [this](int index) -&gt; HTMLElement* { return item(index); }
</span><span class="cx">         );
</span><span class="cx"> 
</span><del>-        beforeElement = std::experimental::visit(visitor, before.value());
</del><ins>+        beforeElement = WTF::visit(visitor, before.value());
</ins><span class="cx">     }
</span><del>-    HTMLElement&amp; toInsert = std::experimental::visit([](const auto&amp; htmlElement) -&gt; HTMLElement&amp; {
</del><ins>+    HTMLElement&amp; toInsert = WTF::visit([](const auto&amp; htmlElement) -&gt; HTMLElement&amp; {
</ins><span class="cx">         return *htmlElement;
</span><span class="cx">     }, element);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLSelectElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLSelectElement.h (207516 => 207517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLSelectElement.h        2016-10-19 02:33:49 UTC (rev 207516)
+++ trunk/Source/WebCore/html/HTMLSelectElement.h        2016-10-19 02:43:44 UTC (rev 207517)
</span><span class="lines">@@ -51,8 +51,8 @@
</span><span class="cx"> 
</span><span class="cx">     bool usesMenuList() const;
</span><span class="cx"> 
</span><del>-    using OptionOrOptGroupElement = std::experimental::variant&lt;RefPtr&lt;HTMLOptionElement&gt;, RefPtr&lt;HTMLOptGroupElement&gt;&gt;;
-    using HTMLElementOrInt = std::experimental::variant&lt;RefPtr&lt;HTMLElement&gt;, int&gt;;
</del><ins>+    using OptionOrOptGroupElement = Variant&lt;RefPtr&lt;HTMLOptionElement&gt;, RefPtr&lt;HTMLOptGroupElement&gt;&gt;;
+    using HTMLElementOrInt = Variant&lt;RefPtr&lt;HTMLElement&gt;, int&gt;;
</ins><span class="cx">     WEBCORE_EXPORT ExceptionOr&lt;void&gt; add(const OptionOrOptGroupElement&amp;, Optional&lt;HTMLElementOrInt&gt; before);
</span><span class="cx"> 
</span><span class="cx">     using Node::remove;
</span></span></pre></div>
<a id="trunkSourceWebCorehtmltrackTrackEventcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/track/TrackEvent.cpp (207516 => 207517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/track/TrackEvent.cpp        2016-10-19 02:33:49 UTC (rev 207516)
+++ trunk/Source/WebCore/html/track/TrackEvent.cpp        2016-10-19 02:43:44 UTC (rev 207517)
</span><span class="lines">@@ -43,7 +43,7 @@
</span><span class="cx">     : Event(type, initializer, isTrusted)
</span><span class="cx"> {
</span><span class="cx">     if (initializer.track) {
</span><del>-        m_track = std::experimental::visit([](const auto&amp; trackbase) -&gt; TrackBase* {
</del><ins>+        m_track = WTF::visit([](const auto&amp; trackbase) -&gt; TrackBase* {
</ins><span class="cx">             return trackbase.get();
</span><span class="cx">         }, *initializer.track);
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceWebCorehtmltrackTrackEventh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/track/TrackEvent.h (207516 => 207517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/track/TrackEvent.h        2016-10-19 02:33:49 UTC (rev 207516)
+++ trunk/Source/WebCore/html/track/TrackEvent.h        2016-10-19 02:43:44 UTC (rev 207517)
</span><span class="lines">@@ -44,7 +44,7 @@
</span><span class="cx">         return adoptRef(*new TrackEvent(type, canBubble, cancelable, WTFMove(track)));
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    using TrackEventTrack = std::experimental::variant&lt;RefPtr&lt;VideoTrack&gt;, RefPtr&lt;AudioTrack&gt;, RefPtr&lt;TextTrack&gt;&gt;;
</del><ins>+    using TrackEventTrack = Variant&lt;RefPtr&lt;VideoTrack&gt;, RefPtr&lt;AudioTrack&gt;, RefPtr&lt;TextTrack&gt;&gt;;
</ins><span class="cx"> 
</span><span class="cx">     struct Init : public EventInit {
</span><span class="cx">         Optional&lt;TrackEventTrack&gt; track;
</span></span></pre></div>
<a id="trunkSourceWebKitmacChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/ChangeLog (207516 => 207517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/ChangeLog        2016-10-19 02:33:49 UTC (rev 207516)
+++ trunk/Source/WebKit/mac/ChangeLog        2016-10-19 02:43:44 UTC (rev 207517)
</span><span class="lines">@@ -1,3 +1,16 @@
</span><ins>+2016-10-18  Sam Weinig  &lt;sam@webkit.org&gt;
+
+        Replace std::experimental::variant with WTF::Variant (or similar)
+        https://bugs.webkit.org/show_bug.cgi?id=163626
+
+        Reviewed by Chris Dumez.
+
+        Rename std::experimental::variant, Variant. Move helpers get/holds_alternative/etc.
+        into the WTF namespace.
+
+        * DOM/DOMHTMLSelectElement.mm:
+        (-[DOMHTMLSelectElement add:before:]):
+
</ins><span class="cx"> 2016-10-18  Simon Fraser  &lt;simon.fraser@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Add a MiniBrowser menu item to apply page scale in WK1 and WK2
</span></span></pre></div>
<a id="trunkSourceWebKitmacDOMDOMHTMLSelectElementmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/DOM/DOMHTMLSelectElement.mm (207516 => 207517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/DOM/DOMHTMLSelectElement.mm        2016-10-19 02:33:49 UTC (rev 207516)
+++ trunk/Source/WebKit/mac/DOM/DOMHTMLSelectElement.mm        2016-10-19 02:43:44 UTC (rev 207517)
</span><span class="lines">@@ -185,7 +185,7 @@
</span><span class="cx">         raiseTypeErrorException();
</span><span class="cx"> 
</span><span class="cx">     auto&amp; coreElement = *core(element);
</span><del>-    std::experimental::variant&lt;RefPtr&lt;WebCore::HTMLOptionElement&gt;, RefPtr&lt;WebCore::HTMLOptGroupElement&gt;&gt; variantElement;
</del><ins>+    Variant&lt;RefPtr&lt;WebCore::HTMLOptionElement&gt;, RefPtr&lt;WebCore::HTMLOptGroupElement&gt;&gt; variantElement;
</ins><span class="cx">     if (is&lt;WebCore::HTMLOptionElement&gt;(coreElement))
</span><span class="cx">         variantElement = &amp;downcast&lt;WebCore::HTMLOptionElement&gt;(coreElement);
</span><span class="cx">     else if (is&lt;WebCore::HTMLOptGroupElement&gt;(coreElement))
</span></span></pre></div>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (207516 => 207517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog        2016-10-19 02:33:49 UTC (rev 207516)
+++ trunk/Tools/ChangeLog        2016-10-19 02:43:44 UTC (rev 207517)
</span><span class="lines">@@ -1,3 +1,16 @@
</span><ins>+2016-10-18  Sam Weinig  &lt;sam@webkit.org&gt;
+
+        Replace std::experimental::variant with WTF::Variant (or similar)
+        https://bugs.webkit.org/show_bug.cgi?id=163626
+
+        Reviewed by Chris Dumez.
+
+        Rename std::experimental::variant, Variant. Move helpers get/holds_alternative/etc.
+        into the WTF namespace.
+
+        * TestWebKitAPI/Tests/WTF/Variant.cpp:
+        (TestWebKitAPI::TEST):
+
</ins><span class="cx"> 2016-10-18  Simon Fraser  &lt;simon.fraser@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Add a MiniBrowser menu item to apply page scale in WK1 and WK2
</span></span></pre></div>
<a id="trunkToolsTestWebKitAPITestsWTFVariantcpp"></a>
<div class="modfile"><h4>Modified: trunk/Tools/TestWebKitAPI/Tests/WTF/Variant.cpp (207516 => 207517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestWebKitAPI/Tests/WTF/Variant.cpp        2016-10-19 02:33:49 UTC (rev 207516)
+++ trunk/Tools/TestWebKitAPI/Tests/WTF/Variant.cpp        2016-10-19 02:43:44 UTC (rev 207517)
</span><span class="lines">@@ -37,9 +37,9 @@
</span><span class="cx"> 
</span><span class="cx"> TEST(WTF_Variant, Initial)
</span><span class="cx"> {
</span><del>-    std::experimental::variant&lt;int, double&gt; v1;
</del><ins>+    Variant&lt;int, double&gt; v1;
</ins><span class="cx">     EXPECT_TRUE(v1.index() == 0);
</span><del>-    EXPECT_TRUE(std::experimental::get&lt;int&gt;(v1) == 0);
</del><ins>+    EXPECT_TRUE(WTF::get&lt;int&gt;(v1) == 0);
</ins><span class="cx"> 
</span><span class="cx">     struct T {
</span><span class="cx">         T() : value(15) { }
</span><span class="lines">@@ -46,28 +46,28 @@
</span><span class="cx">         int value;
</span><span class="cx">     };
</span><span class="cx"> 
</span><del>-    std::experimental::variant&lt;T, int&gt; v2;
</del><ins>+    Variant&lt;T, int&gt; v2;
</ins><span class="cx">     EXPECT_TRUE(v2.index() == 0);
</span><del>-    EXPECT_TRUE(std::experimental::get&lt;T&gt;(v2).value == 15);
</del><ins>+    EXPECT_TRUE(WTF::get&lt;T&gt;(v2).value == 15);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> TEST(WTF_Variant, Basic)
</span><span class="cx"> {
</span><del>-    std::experimental::variant&lt;int, double&gt; variant = 1;
</del><ins>+    Variant&lt;int, double&gt; variant = 1;
</ins><span class="cx">     EXPECT_TRUE(variant.index() == 0);
</span><del>-    EXPECT_TRUE(std::experimental::get&lt;int&gt;(variant) == 1);
-    EXPECT_TRUE(*std::experimental::get_if&lt;int&gt;(variant) == 1);
-    EXPECT_TRUE(std::experimental::get_if&lt;double&gt;(variant) == nullptr);
-    EXPECT_TRUE(std::experimental::holds_alternative&lt;int&gt;(variant));
-    EXPECT_FALSE(std::experimental::holds_alternative&lt;double&gt;(variant));
</del><ins>+    EXPECT_TRUE(WTF::get&lt;int&gt;(variant) == 1);
+    EXPECT_TRUE(*WTF::get_if&lt;int&gt;(variant) == 1);
+    EXPECT_TRUE(WTF::get_if&lt;double&gt;(variant) == nullptr);
+    EXPECT_TRUE(WTF::holds_alternative&lt;int&gt;(variant));
+    EXPECT_FALSE(WTF::holds_alternative&lt;double&gt;(variant));
</ins><span class="cx"> 
</span><span class="cx">     variant = 1.0;
</span><span class="cx">     EXPECT_TRUE(variant.index() == 1);
</span><del>-    EXPECT_TRUE(std::experimental::get&lt;double&gt;(variant) == 1);
-    EXPECT_TRUE(*std::experimental::get_if&lt;double&gt;(variant) == 1.0);
-    EXPECT_TRUE(std::experimental::get_if&lt;int&gt;(variant) == nullptr);
-    EXPECT_TRUE(std::experimental::holds_alternative&lt;double&gt;(variant));
-    EXPECT_FALSE(std::experimental::holds_alternative&lt;int&gt;(variant));
</del><ins>+    EXPECT_TRUE(WTF::get&lt;double&gt;(variant) == 1);
+    EXPECT_TRUE(*WTF::get_if&lt;double&gt;(variant) == 1.0);
+    EXPECT_TRUE(WTF::get_if&lt;int&gt;(variant) == nullptr);
+    EXPECT_TRUE(WTF::holds_alternative&lt;double&gt;(variant));
+    EXPECT_FALSE(WTF::holds_alternative&lt;int&gt;(variant));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> TEST(WTF_Variant, BasicVisitor)
</span><span class="lines">@@ -94,18 +94,18 @@
</span><span class="cx"> 
</span><span class="cx">     Type type = Type::None;
</span><span class="cx"> 
</span><del>-    std::experimental::variant&lt;int, float, String&gt; variant = 8;
-    std::experimental::visit(Visitor(type), variant);
</del><ins>+    Variant&lt;int, float, String&gt; variant = 8;
+    WTF::visit(Visitor(type), variant);
</ins><span class="cx">     EXPECT_TRUE(Type::Int == type);
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     variant = 1.0f;
</span><del>-    std::experimental::visit(Visitor(type), variant);
</del><ins>+    WTF::visit(Visitor(type), variant);
</ins><span class="cx">     EXPECT_TRUE(Type::Float == type);
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     variant = &quot;hello&quot;;
</span><del>-    std::experimental::visit(Visitor(type), variant);
</del><ins>+    WTF::visit(Visitor(type), variant);
</ins><span class="cx">     EXPECT_TRUE(Type::String == type);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -126,18 +126,18 @@
</span><span class="cx">         [&amp;](String) { type = Type::String; }
</span><span class="cx">     );
</span><span class="cx"> 
</span><del>-    std::experimental::variant&lt;int, float, String&gt; variant = 8;
-    std::experimental::visit(visitor, variant);
</del><ins>+    Variant&lt;int, float, String&gt; variant = 8;
+    WTF::visit(visitor, variant);
</ins><span class="cx">     EXPECT_TRUE(Type::Int == type);
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     variant = 1.0f;
</span><del>-    std::experimental::visit(visitor, variant);
</del><ins>+    WTF::visit(visitor, variant);
</ins><span class="cx">     EXPECT_TRUE(Type::Float == type);
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     variant = &quot;hello&quot;;
</span><del>-    std::experimental::visit(visitor, variant);
</del><ins>+    WTF::visit(visitor, variant);
</ins><span class="cx">     EXPECT_TRUE(Type::String == type);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -147,7 +147,7 @@
</span><span class="cx"> 
</span><span class="cx">     {
</span><span class="cx">         auto uniquePtr = std::make_unique&lt;ConstructorDestructorCounter&gt;();
</span><del>-        std::experimental::variant&lt;std::unique_ptr&lt;ConstructorDestructorCounter&gt;, int&gt; v = WTFMove(uniquePtr);
</del><ins>+        Variant&lt;std::unique_ptr&lt;ConstructorDestructorCounter&gt;, int&gt; v = WTFMove(uniquePtr);
</ins><span class="cx"> 
</span><span class="cx">         EXPECT_EQ(1u, ConstructorDestructorCounter::constructionCount);
</span><span class="cx">         EXPECT_EQ(0u, ConstructorDestructorCounter::destructionCount);
</span><span class="lines">@@ -162,7 +162,7 @@
</span><span class="cx">     {
</span><span class="cx">         RefLogger a(&quot;a&quot;);
</span><span class="cx">         RefPtr&lt;RefLogger&gt; ref(&amp;a);
</span><del>-        std::experimental::variant&lt;RefPtr&lt;RefLogger&gt;, int&gt; v = ref;
</del><ins>+        Variant&lt;RefPtr&lt;RefLogger&gt;, int&gt; v = ref;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     ASSERT_STREQ(&quot;ref(a) ref(a) deref(a) deref(a) &quot;, takeLogStr().c_str());
</span><span class="lines">@@ -170,7 +170,7 @@
</span><span class="cx">     {
</span><span class="cx">         RefLogger a(&quot;a&quot;);
</span><span class="cx">         RefPtr&lt;RefLogger&gt; ref(&amp;a);
</span><del>-        std::experimental::variant&lt;RefPtr&lt;RefLogger&gt;, int&gt; v = WTFMove(ref);
</del><ins>+        Variant&lt;RefPtr&lt;RefLogger&gt;, int&gt; v = WTFMove(ref);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     ASSERT_STREQ(&quot;ref(a) deref(a) &quot;, takeLogStr().c_str());
</span><span class="lines">@@ -181,7 +181,7 @@
</span><span class="cx">     {
</span><span class="cx">         RefLogger a(&quot;a&quot;);
</span><span class="cx">         Ref&lt;RefLogger&gt; ref(a);
</span><del>-        std::experimental::variant&lt;Ref&lt;RefLogger&gt;, int&gt; v = WTFMove(ref);
</del><ins>+        Variant&lt;Ref&lt;RefLogger&gt;, int&gt; v = WTFMove(ref);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     ASSERT_STREQ(&quot;ref(a) deref(a) &quot;, takeLogStr().c_str());
</span></span></pre>
</div>
</div>

</body>
</html>