Files
hustoj/web/cppreference-zh/chmhelp/cpp-language-sfinae.html
2025-08-01 12:57:54 +08:00

425 lines
42 KiB
HTML

<!DOCTYPE html>
<html lang="zh" dir="ltr" class="client-nojs" xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh">
<head><meta http-equiv="x-ua-compatible" content="ie=edge">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>SFINAE</title>
<link rel="stylesheet" href="ext.css" />
<link rel="stylesheet" href="site_modules.css" />
</head>
<body class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-cpp_language_sfinae skin-cppreference2 action-view cpp-navbar">
<div id="cpp-content-base">
<div id="content"><a id="top"></a>
<h1 id="firstHeading" class="firstHeading">SFINAE</h1>
<div id="bodyContent">
<div id="contentSub"><span class="subpages">&lt; <a href="cpp.html">cpp</a>&lrm; | <a href="cpp-language.html">language</a></span></div>
<div id="mw-content-text" lang="zh" dir="ltr" class="mw-content-ltr" xml:lang="zh">
<p>&ldquo;&#26367;&#25442;&#22833;&#36133;&#19981;&#26159;&#38169;&#35823;&rdquo; (Substitution Failure Is Not An Error)</p>
<p><br />
&#22312;&#20989;&#25968;&#27169;&#26495;&#30340;&#37325;&#36733;&#20915;&#35758;&#20013;&#20250;&#24212;&#29992;&#27492;&#35268;&#21017;&#65306;&#24403;&#27169;&#26495;&#24418;&#21442;&#22312;<a href="cpp-language-function_template.html#.E6.A8.A1.E6.9D.BF.E5.AE.9E.E5.8F.82.E6.9B.BF.E6.8D.A2">&#26367;&#25442;</a>&#25104;&#26174;&#24335;&#25351;&#23450;&#30340;&#31867;&#22411;&#25110;<a href="cpp-language-template_argument_deduction.html">&#25512;&#23548;&#20986;&#30340;&#31867;&#22411;</a>&#22833;&#36133;&#26102;&#65292;&#20174;<a href="cpp-language-overload_resolution.html">&#37325;&#36733;&#38598;</a>&#20013;&#20002;&#24323;&#36825;&#20010;&#29305;&#21270;&#65292;&#32780;&#38750;&#23548;&#33268;&#32534;&#35793;&#22833;&#36133;&#12290;</p>
<p>&#27492;&#29305;&#24615;&#34987;&#29992;&#20110;&#27169;&#26495;&#20803;&#32534;&#31243;&#12290;</p>
<h3><span class="mw-headline" id=".E8.A7.A3.E9.87.8A">&#35299;&#37322;</span></h3>
<p>&#23545;&#20989;&#25968;&#27169;&#26495;&#24418;&#21442;&#36827;&#34892;&#20004;&#27425;&#26367;&#25442;&#65288;&#30001;&#27169;&#26495;&#23454;&#21442;&#25152;&#26367;&#20195;&#65289;&#65306;</p>
<ul>
<li>&#26174;&#24335;&#25351;&#23450;&#30340;&#27169;&#26495;&#23454;&#21442;&#22312;&#27169;&#26495;&#23454;&#21442;&#25512;&#23548;&#21069;&#26367;&#25442;</li>
<li>&#25512;&#23548;&#20986;&#30340;&#23454;&#21442;&#21644;&#20174;&#40664;&#35748;&#39033;&#33719;&#24471;&#30340;&#23454;&#21442;&#22312;&#27169;&#26495;&#23454;&#21442;&#25512;&#23548;&#21518;&#26367;&#25442;</li>
</ul>
<p>&#26367;&#25442;&#21457;&#29983;&#20110;</p>
<ul>
<li>&#20989;&#25968;&#31867;&#22411;&#20013;&#20351;&#29992;&#30340;&#25152;&#26377;&#31867;&#22411;&#65288;&#21253;&#25324;&#36820;&#22238;&#31867;&#22411;&#21644;&#25152;&#26377;&#24418;&#21442;&#30340;&#31867;&#22411;&#65289;</li>
<li>&#21508;&#20010;&#27169;&#26495;&#24418;&#21442;&#22768;&#26126;&#20013;&#20351;&#29992;&#30340;&#25152;&#26377;&#31867;&#22411;</li>
</ul>
<table class="t-rev-begin">
<tr class="t-rev t-since-cxx11">
<td>
<ul>
<li>&#20989;&#25968;&#31867;&#22411;&#20013;&#20351;&#29992;&#30340;&#25152;&#26377;&#34920;&#36798;&#24335;</li>
<li>&#21508;&#20010;&#27169;&#26495;&#24418;&#21442;&#22768;&#26126;&#20013;&#20351;&#29992;&#30340;&#25152;&#26377;&#34920;&#36798;&#24335;</li>
</ul>
</td>
<td><span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span></td>
</tr>
</table>
<table class="t-rev-begin">
<tr class="t-rev t-since-cxx20">
<td>
<ul>
<li><a href="cpp-language-explicit.html">explicit &#35828;&#26126;&#31526;</a>&#20013;&#20351;&#29992;&#30340;&#25152;&#26377;&#34920;&#36798;&#24335;</li>
</ul>
</td>
<td><span class="t-mark-rev t-since-cxx20">(C++20 &#36215;)</span></td>
</tr>
</table>
<p>&#20197;&#19978;&#31867;&#22411;&#25110;&#34920;&#36798;&#24335;&#22312;&#20197;&#29992;&#26469;&#26367;&#25442;&#30340;&#23454;&#21442;&#20889;&#20986;&#26102;&#35884;&#26500;&#65288;&#24182;&#24102;&#26377;&#24517;&#35201;&#30340;&#35786;&#26029;&#65289;&#30340;&#22330;&#21512;&#26159;<i>&#26367;&#25442;&#22833;&#36133;</i>&#12290;</p>
<p>&#21482;&#26377;&#22312;&#20989;&#25968;&#31867;&#22411;&#25110;&#20854;&#27169;&#26495;&#24418;&#21442;&#31867;&#22411;<span class="t-rev-inl t-since-cxx20"><span>&#25110;&#20854; <a href="cpp-language-explicit.html">explicit &#35828;&#26126;&#31526;</a></span> <span><span class="t-mark-rev t-since-cxx20">(C++20 &#36215;)</span></span></span>&#30340;<i>&#31435;&#21363;&#35821;&#22659;</i>&#20013;&#30340;&#31867;&#22411;&#19982;&#34920;&#36798;&#24335;&#20013;&#30340;&#22833;&#36133;&#26159; SFINAE &#38169;&#35823;&#12290;&#22914;&#26524;&#23545;&#26367;&#25442;&#21518;&#30340;&#31867;&#22411;/&#34920;&#36798;&#24335;&#30340;&#27714;&#20540;&#23548;&#33268;&#21103;&#20316;&#29992;&#65292;&#20363;&#22914;&#23454;&#20363;&#21270;&#26576;&#27169;&#26495;&#29305;&#21270;&#12289;&#29983;&#25104;&#26576;&#38544;&#24335;&#23450;&#20041;&#30340;&#25104;&#21592;&#20989;&#25968;&#31561;&#65292;&#37027;&#20040;&#36825;&#20123;&#21103;&#20316;&#29992;&#20013;&#30340;&#38169;&#35823;&#34987;&#24403;&#20570;&#30828;&#38169;&#35823;&#12290;<span class="t-rev-inl t-since-cxx20"><span><a href="cpp-language-lambda.html">lambda &#34920;&#36798;&#24335;</a>&#19981;&#34987;&#24403;&#20316;&#26159;&#31435;&#21363;&#35821;&#22659;&#30340;&#19968;&#37096;&#20998;&#12290;</span> <span><span class="t-mark-rev t-since-cxx20">(C++20 &#36215;)</span></span></span></p>
<table class="metadata plainlinks ambox mbox-small-left ambox-notice" style="">
<tr>
<td class="mbox-empty-cell"></td>
<td class="mbox-text" style="">&#26412;&#33410;&#26410;&#23436;&#25104;<br />
&#21407;&#22240;&#65306;&#21547;&#26377;&#27492;&#31867;&#24433;&#21709;&#30340;&#23567;&#31034;&#20363;</td>
</tr>
</table>
<p>&#26367;&#25442;&#20197;&#35789;&#27861;&#24207;&#36827;&#34892;&#65292;&#24182;&#22312;&#36935;&#21040;&#22833;&#36133;&#26102;&#32456;&#27490;&#12290;</p>
<table class="t-rev-begin">
<tr class="t-rev t-since-cxx11">
<td>
<p>&#22914;&#26524;&#22810;&#20010;&#22768;&#26126;&#20855;&#26377;&#19981;&#21516;&#30340;&#35789;&#27861;&#39034;&#24207;&#65288;&#20363;&#22914;&#65292;&#26576;&#20010;&#20989;&#25968;&#27169;&#26495;&#22768;&#26126;&#20026;&#20855;&#26377;&#23614;&#38543;&#36820;&#22238;&#31867;&#22411;&#65292;&#23427;&#22312;&#26576;&#20010;&#24418;&#21442;&#20043;&#21518;&#26367;&#25442;&#65292;&#28982;&#21518;&#34987;&#37325;&#22768;&#26126;&#20026;&#20855;&#26377;&#24120;&#35268;&#36820;&#22238;&#31867;&#22411;&#65292;&#23427;&#21017;&#22312;&#35813;&#24418;&#21442;&#20043;&#21069;&#26367;&#25442;&#65289;&#65292;&#32780;&#36825;&#20250;&#23548;&#33268;&#27169;&#26495;&#23454;&#20363;&#21270;&#20197;&#19981;&#21516;&#39034;&#24207;&#20986;&#29616;&#25110;&#23436;&#20840;&#19981;&#20986;&#29616;&#65292;&#37027;&#20040;&#31243;&#24207;&#35884;&#26500;&#65307;&#19981;&#35201;&#27714;&#35786;&#26029;&#12290;</p>
</td>
<td><span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span></td>
</tr>
</table>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">typename</span> A<span class="sy1">&gt;</span>
<span class="kw1">struct</span> B <span class="br0">{</span> <span class="kw1">using</span> type <span class="sy1">=</span> <span class="kw1">typename</span> A<span class="sy4">::</span><span class="me2">type</span><span class="sy4">;</span> <span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>
<span class="kw1">class</span> T,
<span class="kw1">class</span> U <span class="sy1">=</span> <span class="kw1">typename</span> T<span class="sy4">::</span><span class="me2">type</span>, <span class="co1">// &#22914;&#26524; T &#27809;&#26377;&#25104;&#21592; type &#37027;&#20040;&#23601;&#26159; SFINAE &#22833;&#36133;</span>
<span class="kw1">class</span> V <span class="sy1">=</span> <span class="kw1">typename</span> B<span class="sy1">&lt;</span>T<span class="sy1">&gt;</span><span class="sy4">::</span><span class="me2">type</span><span class="sy1">&gt;</span> <span class="co1">// &#22914;&#26524; T &#27809;&#26377;&#25104;&#21592; type &#37027;&#20040;&#23601;&#26159;&#30828;&#38169;&#35823;</span>
<span class="co1">// &#65288;&#32463;&#30001; CWG 1227 &#20445;&#35777;&#19981;&#20986;&#29616;&#65292;</span>
<span class="co1">// &#22240;&#20026;&#21040; U &#30340;&#40664;&#35748;&#27169;&#26495;&#23454;&#21442;&#20013;&#30340;&#26367;&#25442;&#20250;&#39318;&#20808;&#22833;&#36133;&#65289;</span>
<span class="kw4">void</span> foo <span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T<span class="sy1">&gt;</span>
<span class="kw1">typename</span> T<span class="sy4">::</span><span class="me2">type</span> h<span class="br0">(</span><span class="kw1">typename</span> B<span class="sy1">&lt;</span>T<span class="sy1">&gt;</span><span class="sy4">::</span><span class="me2">type</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T<span class="sy1">&gt;</span>
<span class="kw4">auto</span> h<span class="br0">(</span><span class="kw1">typename</span> B<span class="sy1">&lt;</span>T<span class="sy1">&gt;</span><span class="sy4">::</span><span class="me2">type</span><span class="br0">)</span> <span class="sy2">-</span><span class="sy1">&gt;</span> <span class="kw1">typename</span> T<span class="sy4">::</span><span class="me2">type</span><span class="sy4">;</span> <span class="co1">// &#37325;&#22768;&#26126;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T<span class="sy1">&gt;</span>
<span class="kw4">void</span> h<span class="br0">(</span>...<span class="br0">)</span> <span class="br0">{</span><span class="br0">}</span>
<span class="kw1">using</span> R <span class="sy1">=</span> decltype<span class="br0">(</span>h<span class="sy1">&lt;</span><span class="kw4">int</span><span class="sy1">&gt;</span><span class="br0">(</span><span class="nu0">0</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#35884;&#26500;&#65292;&#19981;&#35201;&#27714;&#35786;&#26029;</span></pre></div>
</div>
<h3><span class="mw-headline" id=".E7.B1.BB.E5.9E.8B_SFINAE">&#31867;&#22411; SFINAE</span></h3>
<p>&#19979;&#21015;&#31867;&#22411;&#30340;&#38169;&#35823;&#26159; SFINAE &#38169;&#35823;&#65306;</p>
<table class="t-rev-begin">
<tr class="t-rev t-since-cxx11">
<td>
<ul>
<li>&#35797;&#22270;&#23454;&#20363;&#21270;&#21547;&#26377;&#22810;&#20010;&#19981;&#21516;&#38271;&#24230;&#30340;&#21253;&#30340;&#21253;&#23637;&#24320;</li>
</ul>
</td>
<td><span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span></td>
</tr>
</table>
<ul>
<li>&#35797;&#22270;&#21019;&#24314; void &#30340;&#25968;&#32452;&#65292;&#24341;&#29992;&#30340;&#25968;&#32452;&#65292;&#20989;&#25968;&#30340;&#25968;&#32452;&#65292;&#36127;&#22823;&#23567;&#30340;&#25968;&#32452;&#65292;&#38750;&#25972;&#22411;&#22823;&#23567;&#30340;&#25968;&#32452;&#65292;&#25110;&#32773;&#38646;&#22823;&#23567;&#30340;&#25968;&#32452;&#65306;</li>
</ul>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw4">int</span> I<span class="sy1">&gt;</span>
<span class="kw4">void</span> div<span class="br0">(</span><span class="kw4">char</span><span class="br0">(</span><span class="sy2">*</span><span class="br0">)</span><span class="br0">[</span>I <span class="sy2">%</span> <span class="nu0">2</span> <span class="sy1">==</span> <span class="nu0">0</span><span class="br0">]</span> <span class="sy1">=</span> <span class="nu0">0</span><span class="br0">)</span>
<span class="br0">{</span>
<span class="co1">// &#24403; I &#26159;&#20598;&#25968;&#26102;&#36873;&#25321;&#36825;&#20010;&#37325;&#36733;</span>
<span class="br0">}</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw4">int</span> I<span class="sy1">&gt;</span>
<span class="kw4">void</span> div<span class="br0">(</span><span class="kw4">char</span><span class="br0">(</span><span class="sy2">*</span><span class="br0">)</span><span class="br0">[</span>I <span class="sy2">%</span> <span class="nu0">2</span> <span class="sy1">==</span> <span class="nu0">1</span><span class="br0">]</span> <span class="sy1">=</span> <span class="nu0">0</span><span class="br0">)</span>
<span class="br0">{</span>
<span class="co1">// &#24403; I &#26159;&#22855;&#25968;&#26102;&#36873;&#25321;&#36825;&#20010;&#37325;&#36733;</span>
<span class="br0">}</span></pre></div>
</div>
<ul>
<li>&#35797;&#22270;&#22312;&#20316;&#29992;&#22495;&#35299;&#26512;&#36816;&#31639;&#31526; <code><b>::</b></code> &#24038;&#20391;&#20351;&#29992;&#31867;&#21644;&#26522;&#20030;&#20197;&#22806;&#30340;&#31867;&#22411;&#65306;</li>
</ul>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T<span class="sy1">&gt;</span>
<span class="kw4">int</span> f<span class="br0">(</span><span class="kw1">typename</span> T<span class="sy4">::</span><span class="me2">B</span><span class="sy2">*</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T<span class="sy1">&gt;</span>
<span class="kw4">int</span> f<span class="br0">(</span>T<span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">int</span> i <span class="sy1">=</span> f<span class="sy1">&lt;</span><span class="kw4">int</span><span class="sy1">&gt;</span><span class="br0">(</span><span class="nu0">0</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#20351;&#29992;&#31532;&#20108;&#20010;&#37325;&#36733;</span></pre></div>
</div>
<ul>
<li>&#35797;&#22270;&#20351;&#29992;&#31867;&#22411;&#30340;&#25104;&#21592;&#65292;&#20854;&#20013;</li>
</ul>
<dl>
<dd>
<ul>
<li>&#31867;&#22411;&#19981;&#21253;&#21547;&#25351;&#23450;&#25104;&#21592;</li>
<li>&#22312;&#35201;&#27714;&#31867;&#22411;&#30340;&#22320;&#26041;&#65292;&#25351;&#23450;&#25104;&#21592;&#19981;&#26159;&#31867;&#22411;</li>
<li>&#22312;&#35201;&#27714;&#27169;&#26495;&#30340;&#22320;&#26041;&#65292;&#25351;&#23450;&#25104;&#21592;&#19981;&#26159;&#27169;&#26495;</li>
<li>&#22312;&#35201;&#27714;&#38750;&#31867;&#22411;&#30340;&#22320;&#26041;&#65292;&#25351;&#23450;&#25104;&#21592;&#19981;&#26159;&#38750;&#31867;&#22411;</li>
</ul>
</dd>
</dl>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1">templat <span class="sy1">&lt;</span><span class="kw4">int</span> I<span class="sy1">&gt;</span>
<span class="kw1">struct</span> X <span class="br0">{</span><span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T<span class="sy1">&gt;</span> <span class="kw1">class</span><span class="sy1">&gt;</span>
<span class="kw1">struct</span> Z <span class="br0">{</span><span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T<span class="sy1">&gt;</span>
<span class="kw4">void</span> f<span class="br0">(</span><span class="kw1">typename</span> T<span class="sy4">::</span><span class="me2">Y</span><span class="sy2">*</span><span class="br0">)</span> <span class="br0">{</span><span class="br0">}</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T<span class="sy1">&gt;</span>
<span class="kw4">void</span> g<span class="br0">(</span>X<span class="sy1">&lt;</span>T<span class="sy4">::</span><span class="me2">N</span><span class="sy1">&gt;</span><span class="sy2">*</span><span class="br0">)</span> <span class="br0">{</span><span class="br0">}</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T<span class="sy1">&gt;</span>
<span class="kw4">void</span> h<span class="br0">(</span>Z<span class="sy1">&lt;</span>T<span class="sy4">::</span><span class="kw1">template</span> TT<span class="sy1">&gt;</span><span class="sy2">*</span><span class="br0">)</span> <span class="br0">{</span><span class="br0">}</span>
<span class="kw1">struct</span> A <span class="br0">{</span><span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">struct</span> B <span class="br0">{</span> <span class="kw4">int</span> Y<span class="sy4">;</span> <span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">struct</span> C <span class="br0">{</span> <span class="kw1">typedef</span> <span class="kw4">int</span> N<span class="sy4">;</span> <span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">struct</span> D <span class="br0">{</span> <span class="kw1">typedef</span> <span class="kw4">int</span> TT<span class="sy4">;</span> <span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">struct</span> B1 <span class="br0">{</span> <span class="kw1">typedef</span> <span class="kw4">int</span> Y<span class="sy4">;</span> <span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">struct</span> C1 <span class="br0">{</span> <span class="kw4">static</span> <span class="kw4">const</span> <span class="kw4">int</span> N <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> <span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">struct</span> D1
<span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">typename</span> T<span class="sy1">&gt;</span>
<span class="kw1">struct</span> TT <span class="br0">{</span><span class="br0">}</span><span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span>
<span class="br0">{</span>
<span class="co1">// &#19979;&#21015;&#21508;&#20010;&#24773;&#20917;&#25512;&#23548;&#22833;&#36133;&#65306;</span>
f<span class="sy1">&lt;</span>A<span class="sy1">&gt;</span><span class="br0">(</span><span class="nu0">0</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#19981;&#21547;&#25104;&#21592; Y</span>
f<span class="sy1">&lt;</span>B<span class="sy1">&gt;</span><span class="br0">(</span><span class="nu0">0</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// B &#30340; Y &#25104;&#21592;&#19981;&#26159;&#31867;&#22411;</span>
g<span class="sy1">&lt;</span>C<span class="sy1">&gt;</span><span class="br0">(</span><span class="nu0">0</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// C &#30340; N &#25104;&#21592;&#19981;&#26159;&#38750;&#31867;&#22411;</span>
h<span class="sy1">&lt;</span>D<span class="sy1">&gt;</span><span class="br0">(</span><span class="nu0">0</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// D &#30340; TT &#25104;&#21592;&#19981;&#26159;&#27169;&#26495;</span>
<span class="co1">// &#19979;&#21015;&#21508;&#20010;&#24773;&#20917;&#25512;&#23548;&#25104;&#21151;&#65306;</span>
f<span class="sy1">&lt;</span>B1<span class="sy1">&gt;</span><span class="br0">(</span><span class="nu0">0</span><span class="br0">)</span><span class="sy4">;</span>
g<span class="sy1">&lt;</span>C1<span class="sy1">&gt;</span><span class="br0">(</span><span class="nu0">0</span><span class="br0">)</span><span class="sy4">;</span>
h<span class="sy1">&lt;</span>D1<span class="sy1">&gt;</span><span class="br0">(</span><span class="nu0">0</span><span class="br0">)</span><span class="sy4">;</span>
<span class="br0">}</span>
<span class="co1">// &#26410;&#23436;&#25104;&#65306;&#38656;&#35201;&#28436;&#31034;&#37325;&#36733;&#20915;&#35758;&#65292;&#32780;&#19981;&#21482;&#26159;&#22833;&#36133;</span></pre></div>
</div>
<ul>
<li>&#35797;&#22270;&#21019;&#24314;&#25351;&#21521;&#24341;&#29992;&#30340;&#25351;&#38024;</li>
<li>&#35797;&#22270;&#21019;&#24314;&#21040; void &#30340;&#24341;&#29992;</li>
<li>&#35797;&#22270;&#21019;&#24314;&#25351;&#21521; T &#30340;&#25104;&#21592;&#30340;&#25351;&#38024;&#65292;&#20854;&#20013; T &#19981;&#26159;&#31867;&#31867;&#22411;&#65306;</li>
</ul>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">typename</span> T<span class="sy1">&gt;</span>
<span class="kw1">class</span> is_class
<span class="br0">{</span>
<span class="kw1">typedef</span> <span class="kw4">char</span> yes<span class="br0">[</span><span class="nu0">1</span><span class="br0">]</span><span class="sy4">;</span>
<span class="kw1">typedef</span> <span class="kw4">char</span> no<span class="br0">[</span><span class="nu0">2</span><span class="br0">]</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">typename</span> C<span class="sy1">&gt;</span>
<span class="kw4">static</span> yes<span class="sy3">&amp;</span> test<span class="br0">(</span><span class="kw4">int</span> C<span class="sy4">::</span><span class="sy2">*</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#22914;&#26524; C &#26159;&#31867;&#31867;&#22411;&#23601;&#36873;&#25321;&#23427;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">typename</span> C<span class="sy1">&gt;</span>
<span class="kw4">static</span> no<span class="sy3">&amp;</span> test<span class="br0">(</span>...<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#21542;&#21017;&#36873;&#25321;&#23427;</span>
<span class="kw1">public</span><span class="sy4">:</span>
<span class="kw4">static</span> <span class="kw4">bool</span> <span class="kw4">const</span> value <span class="sy1">=</span> sizeof<span class="br0">(</span>test<span class="sy1">&lt;</span>T<span class="sy1">&gt;</span><span class="br0">(</span><span class="nu0">0</span><span class="br0">)</span><span class="br0">)</span> <span class="sy1">==</span> sizeof<span class="br0">(</span>yes<span class="br0">)</span><span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span></pre></div>
</div>
<ul>
<li>&#35797;&#22270;&#23558;&#38750;&#27861;&#31867;&#22411;&#32473;&#20104;&#38750;&#31867;&#22411;&#27169;&#26495;&#24418;&#21442;&#65306;</li>
</ul>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T, T<span class="sy1">&gt;</span>
<span class="kw1">struct</span> S <span class="br0">{</span><span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T<span class="sy1">&gt;</span>
<span class="kw4">int</span> f<span class="br0">(</span>S<span class="sy1">&lt;</span>T, T<span class="br0">(</span><span class="br0">)</span><span class="sy1">&gt;</span><span class="sy2">*</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">struct</span> X <span class="br0">{</span><span class="br0">}</span><span class="sy4">;</span>
<span class="kw4">int</span> i0 <span class="sy1">=</span> f<span class="sy1">&lt;</span>X<span class="sy1">&gt;</span><span class="br0">(</span><span class="nu0">0</span><span class="br0">)</span><span class="sy4">;</span>
<span class="co1">// &#26410;&#23436;&#25104;&#65306;&#38656;&#35201;&#28436;&#31034;&#37325;&#36733;&#20915;&#35758;&#65292;&#32780;&#19981;&#21482;&#26159;&#22833;&#36133;</span></pre></div>
</div>
<ul>
<li>&#35797;&#22270;&#22312;&#20197;&#19979;&#35821;&#22659;&#20013;&#36827;&#34892;&#38750;&#27861;&#36716;&#25442;&#65306;</li>
</ul>
<dl>
<dd>
<ul>
<li>&#27169;&#26495;&#23454;&#21442;&#34920;&#36798;&#24335;</li>
<li>&#20989;&#25968;&#22768;&#26126;&#20013;&#20351;&#29992;&#30340;&#34920;&#36798;&#24335;&#65306;</li>
</ul>
</dd>
</dl>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T, T<span class="sy2">*</span><span class="sy1">&gt;</span>
<span class="kw4">int</span> f<span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">int</span> i2 <span class="sy1">=</span> f<span class="sy1">&lt;</span><span class="kw4">int</span>,<span class="nu0">1</span><span class="sy1">&gt;</span><span class="br0">(</span><span class="nu0">0</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#19981;&#33021;&#23558; 1 &#36716;&#25442;&#20026; int*</span>
<span class="co1">// &#26410;&#23436;&#25104;&#65306;&#38656;&#35201;&#28436;&#31034;&#37325;&#36733;&#20915;&#35758;&#65292;&#32780;&#38750;&#20165;&#26159;&#22833;&#36133;</span></pre></div>
</div>
<ul>
<li>&#35797;&#22270;&#21019;&#24314;&#24418;&#21442;&#31867;&#22411;&#20026; void &#30340;&#20989;&#25968;&#31867;&#22411;</li>
<li>&#35797;&#22270;&#21019;&#24314;&#36820;&#22238;&#25968;&#32452;&#31867;&#22411;&#25110;&#20989;&#25968;&#31867;&#22411;&#30340;&#20989;&#25968;&#31867;&#22411;</li>
</ul>
<h3><span class="mw-headline" id=".E8.A1.A8.E8.BE.BE.E5.BC.8F_SFINAE">&#34920;&#36798;&#24335; SFINAE</span></h3>
<table class="t-rev-begin">
<tr class="t-rev t-until-cxx11">
<td>
<p>C++11 &#21069;&#65292;&#21482;&#26377;&#22312;&#31867;&#22411;&#20013;&#20351;&#29992;&#30340;&#24120;&#37327;&#34920;&#36798;&#24335;&#65288;&#20363;&#22914;&#25968;&#32452;&#36793;&#30028;&#65289;&#25165;&#35201;&#27714;&#34987;&#24403;&#20570; SFINAE&#65288;&#32780;&#38750;&#30828;&#38169;&#35823;&#65289;&#12290;</p>
</td>
<td><span class="t-mark-rev t-until-cxx11">(C++11 &#21069;)</span></td>
</tr>
<tr class="t-rev t-since-cxx11">
<td>
<p>&#19979;&#21015;&#34920;&#36798;&#24335;&#38169;&#35823;&#26159; SFINAE &#38169;&#35823;&#65306;</p>
<ul>
<li>&#27169;&#26495;&#24418;&#21442;&#31867;&#22411;&#20013;&#20351;&#29992;&#30340;&#35884;&#26500;&#34920;&#36798;&#24335;</li>
<li>&#20989;&#25968;&#31867;&#22411;&#20013;&#20351;&#29992;&#30340;&#35884;&#26500;&#34920;&#36798;&#24335;</li>
</ul>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">struct</span> X <span class="br0">{</span><span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">struct</span> Y <span class="br0">{</span> Y<span class="br0">(</span>X<span class="br0">)</span><span class="br0">{</span><span class="br0">}</span> <span class="br0">}</span><span class="sy4">;</span> <span class="co1">// X &#21487;&#20197;&#36716;&#25442;&#21040; Y</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T<span class="sy1">&gt;</span>
<span class="kw4">auto</span> f<span class="br0">(</span>T t1, T t2<span class="br0">)</span> <span class="sy2">-</span><span class="sy1">&gt;</span> decltype<span class="br0">(</span>t1 <span class="sy2">+</span> t2<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#37325;&#36733; #1</span>
X f<span class="br0">(</span>Y, Y<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#37325;&#36733; #2</span>
X x1, x2<span class="sy4">;</span>
X x3 <span class="sy1">=</span> f<span class="br0">(</span>x1, x2<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#25512;&#23548;&#22312; #1 &#19978;&#22833;&#36133;&#65288;&#34920;&#36798;&#24335; x1+x2 &#20026;&#35884;&#26500;&#65289;</span>
<span class="co1">// &#37325;&#36733;&#38598;&#20013;&#21482;&#26377; #2&#65292;&#35843;&#29992;&#23427;</span></pre></div>
</div>
</td>
<td><span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span></td>
</tr>
</table>
<h3><span class="mw-headline" id=".E9.83.A8.E5.88.86.E7.89.B9.E5.8C.96.E4.B8.AD.E7.9A.84_SFINAE">&#37096;&#20998;&#29305;&#21270;&#20013;&#30340; SFINAE</span></h3>
<p>&#22312;&#30830;&#23450;&#19968;&#20010;&#31867;<span class="t-rev-inl t-since-cxx14"><span>&#25110;&#21464;&#37327;</span> <span><span class="t-mark-rev t-since-cxx14">(C++14 &#36215;)</span></span></span>&#27169;&#26495;&#30340;&#29305;&#21270;&#26159;&#30001;<a href="cpp-language-partial_specialization.html">&#37096;&#20998;&#29305;&#21270;</a>&#36824;&#26159;&#20027;&#27169;&#26495;&#29983;&#25104;&#30340;&#26102;&#20505;&#20063;&#20250;&#20986;&#29616;&#25512;&#23548;&#19982;&#26367;&#25442;&#12290;&#22312;&#36825;&#31181;&#30830;&#23450;&#26399;&#38388;&#65292;&#32534;&#35793;&#22120;&#19981;&#20250;&#25226;&#26367;&#25442;&#22833;&#36133;&#24403;&#20316;&#30828;&#38169;&#35823;&#65292;&#21453;&#32780;&#20687;&#28041;&#21450;&#20989;&#25968;&#27169;&#26495;&#30340;&#37325;&#36733;&#20915;&#35758;&#20013;&#19968;&#26679;&#24573;&#30053;&#23545;&#24212;&#30340;&#37096;&#20998;&#29305;&#21270;&#22768;&#26126;&#12290;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="co1">// &#20027;&#27169;&#26495;&#22788;&#29702;&#26080;&#27861;&#24341;&#29992;&#30340;&#31867;&#22411;&#65306;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T, <span class="kw1">class</span> <span class="sy1">=</span> <span class="kw4">void</span><span class="sy1">&gt;</span>
<span class="kw1">struct</span> reference_traits
<span class="br0">{</span>
<span class="kw1">using</span> add_lref <span class="sy1">=</span> T<span class="sy4">;</span>
<span class="kw1">using</span> add_rref <span class="sy1">=</span> T<span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="co1">// &#29305;&#21270;&#35782;&#21035;&#21487;&#20197;&#24341;&#29992;&#30340;&#31867;&#22411;&#65306;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T<span class="sy1">&gt;</span>
<span class="kw1">struct</span> reference_traits<span class="sy1">&lt;</span>T, <a href="cpp-types-void_t.html"><span class="kw632">std::<span class="me2">void_t</span></span></a><span class="sy1">&lt;</span>T<span class="sy3">&amp;</span><span class="sy1">&gt;&gt;</span>
<span class="br0">{</span>
<span class="kw1">using</span> add_lref <span class="sy1">=</span> T<span class="sy3">&amp;</span><span class="sy4">;</span>
<span class="kw1">using</span> add_rref <span class="sy1">=</span> T<span class="sy3">&amp;&amp;</span><span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T<span class="sy1">&gt;</span>
<span class="kw1">using</span> add_lvalue_reference_t <span class="sy1">=</span> <span class="kw1">typename</span> reference_traits<span class="sy1">&lt;</span>T<span class="sy1">&gt;</span><span class="sy4">::</span><span class="me2">add_lref</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T<span class="sy1">&gt;</span>
<span class="kw1">using</span> add_rvalue_reference_t <span class="sy1">=</span> <span class="kw1">typename</span> reference_traits<span class="sy1">&lt;</span>T<span class="sy1">&gt;</span><span class="sy4">::</span><span class="me2">add_rref</span><span class="sy4">;</span></pre></div>
</div>
<p>&#27880;&#65306;&#24403;&#21069;&#37096;&#20998;&#29305;&#21270; SFINAE &#26410;&#34987;&#26631;&#20934;&#27491;&#24335;&#25903;&#25345;&#65288;&#21442;&#38405; <a rel="nofollow" class="external text" href="https://wg21.cmeerw.net/cwg/issue2054">CWG &#38382;&#39064; 2054</a>&#65289;&#65292;&#28982;&#32780;&#26631;&#20934;&#24211;&#25193;&#23637; TS &#33258;&#29256;&#26412; 2 &#36215;&#35201;&#27714;&#23427;&#33021;&#36215;&#25928;&#65288;&#21442;&#38405;<a href="cpp-experimental-is_detected.html">&#26816;&#27979;&#25163;&#27861;</a>&#65289;&#12290;</p>
<h3><span class="mw-headline" id=".E5.BA.93.E6.94.AF.E6.8C.81">&#24211;&#25903;&#25345;</span></h3>
<table class="t-rev-begin">
<tr class="t-rev t-since-cxx11">
<td>
<p>&#26631;&#20934;&#24211;&#32452;&#20214; <span class="t-lc"><a href="cpp-types-enable_if.html">std::enable_if</a></span> &#20801;&#35768;&#21019;&#24314;&#26367;&#25442;&#22833;&#36133;&#65292;&#20197;&#22522;&#20110;&#26576;&#20010;&#22312;&#32534;&#35793;&#26102;&#27714;&#20540;&#30340;&#26465;&#20214;&#26469;&#21551;&#29992;&#25110;&#31105;&#29992;&#29305;&#23450;&#30340;&#37325;&#36733;&#12290;</p>
<p>&#21478;&#22806;&#65292;&#35768;&#22810;<a href="cpp-types.html">&#31867;&#22411;&#29305;&#24615;</a>&#22312;&#36866;&#21512;&#30340;&#32534;&#35793;&#22120;&#25193;&#23637;&#19981;&#21487;&#29992;&#26102;&#24517;&#39035;&#20197; SFINAE &#23454;&#29616;&#12290;</p>
</td>
<td><span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span></td>
</tr>
</table>
<table class="t-rev-begin">
<tr class="t-rev t-since-cxx17">
<td>
<p>&#26631;&#20934;&#24211;&#32452;&#20214; <span class="t-lc"><a href="cpp-types-void_t.html">std::void_t</a></span> &#26159;&#21478;&#19968;&#20010;&#31616;&#21270;&#37096;&#20998;&#29305;&#21270; SFINAE &#30340;&#24212;&#29992;&#30340;&#24037;&#20855;&#20803;&#20989;&#25968;&#12290;</p>
</td>
<td><span class="t-mark-rev t-since-cxx17">(C++17 &#36215;)</span></td>
</tr>
</table>
<h3><span class="mw-headline" id=".E6.9B.BF.E4.BB.A3.E6.96.B9.E6.A1.88">&#26367;&#20195;&#26041;&#26696;</span></h3>
<p>&#21482;&#35201;&#21487;&#29992;&#65292;<a href="cpp-iterator-iterator_tags.html#.E7.A4.BA.E4.BE.8B">&#26631;&#31614;&#27966;&#21457;</a><span class="t-rev-inl t-since-cxx17"><span>&#12289;<a href="cpp-language-if.html#constexpr_if"><code>if constexpr</code></a></span> <span><span class="t-mark-rev t-since-cxx17">(C++17 &#36215;)</span></span></span><span class="t-rev-inl t-since-cxx20"><span>&#20197;&#21450;<a href="cpp-language-constraints.html">&#27010;&#24565;</a></span> <span><span class="t-mark-rev t-since-cxx20">(C++20 &#36215;)</span></span></span>&#36890;&#24120;&#37117;&#27604;&#30452;&#25509;&#20351;&#29992; SFINAE &#26356;&#22909;&#12290;</p>
<table class="t-rev-begin">
<tr class="t-rev t-since-cxx11">
<td>
<p>&#22914;&#26524;&#21482;&#24819;&#35201;&#26465;&#20214;&#24615;&#30340;&#32534;&#35793;&#26102;&#38169;&#35823;&#65292;<a href="cpp-language-static_assert.html"><code>static_assert</code></a> &#36890;&#24120;&#27604; SFINAE &#26356;&#36866;&#21512;&#12290;</p>
</td>
<td><span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span></td>
</tr>
</table>
<h3><span class="mw-headline" id=".E7.A4.BA.E4.BE.8B">&#31034;&#20363;</span></h3>
<div class="t-example">
<p>&#19968;&#31181;&#24120;&#35265;&#25163;&#27861;&#65292;&#26159;&#22312;&#36820;&#22238;&#31867;&#22411;&#19978;&#20351;&#29992;&#34920;&#36798;&#24335; SFINAE&#65292;&#20854;&#20013;&#34920;&#36798;&#24335;&#20351;&#29992;&#36887;&#21495;&#36816;&#31639;&#31526;&#65292;&#20854;&#24038;&#23376;&#34920;&#36798;&#24335;&#26159;&#25152;&#26816;&#39564;&#30340;&#65288;&#36716;&#22411;&#21040; void &#20197;&#30830;&#20445;&#19981;&#20250;&#36873;&#25321;&#36820;&#22238;&#31867;&#22411;&#19978;&#30340;&#29992;&#25143;&#23450;&#20041;&#36887;&#21495;&#36816;&#31639;&#31526;&#65289;&#65292;&#32780;&#21491;&#23376;&#34920;&#36798;&#24335;&#20855;&#26377;&#26399;&#26395;&#20989;&#25968;&#36820;&#22238;&#30340;&#31867;&#22411;&#12290;</p>
<div class="t-example-live-link"></div>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="co2">#include &lt;iostream&gt;</span>
<span class="co1">// &#27492;&#37325;&#36733;&#22987;&#32456;&#22312;&#37325;&#36733;&#38598;&#20013;</span>
<span class="co1">// &#30465;&#30053;&#21495;&#24418;&#21442;&#23545;&#20110;&#37325;&#36733;&#20915;&#35758;&#20855;&#26377;&#26368;&#20302;&#31561;&#32423;</span>
<span class="kw4">void</span> test<span class="br0">(</span>...<span class="br0">)</span>
<span class="br0">{</span>
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;&#35843;&#29992;&#20102;&#20445;&#24213;&#37325;&#36733;<span class="es1">\n</span>&quot;</span><span class="sy4">;</span>
<span class="br0">}</span>
<span class="co1">// &#22914;&#26524; C &#26159;&#31867;&#30340;&#24341;&#29992;&#31867;&#22411;&#19988; F &#26159;&#25351;&#21521; C &#30340;&#25104;&#21592;&#20989;&#25968;&#30340;&#25351;&#38024;&#65292;</span>
<span class="co1">// &#37027;&#20040;&#36825;&#20010;&#37325;&#36733;&#20250;&#34987;&#28155;&#21152;&#21040;&#37325;&#36733;&#38598;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> C, <span class="kw1">class</span> F<span class="sy1">&gt;</span>
<span class="kw4">auto</span> test<span class="br0">(</span>C c, F f<span class="br0">)</span> <span class="sy2">-</span><span class="sy1">&gt;</span> decltype<span class="br0">(</span><span class="br0">(</span><span class="kw4">void</span><span class="br0">)</span><span class="br0">(</span>c.<span class="sy2">*</span>f<span class="br0">)</span><span class="br0">(</span><span class="br0">)</span>, <span class="kw4">void</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span>
<span class="br0">{</span>
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;&#35843;&#29992;&#20102;&#24341;&#29992;&#37325;&#36733;<span class="es1">\n</span>&quot;</span><span class="sy4">;</span>
<span class="br0">}</span>
<span class="co1">// &#22914;&#26524; C &#26159;&#31867;&#30340;&#25351;&#38024;&#31867;&#22411;&#19988; F &#26159;&#25351;&#21521; C &#30340;&#25104;&#21592;&#20989;&#25968;&#30340;&#25351;&#38024;&#65292;</span>
<span class="co1">// &#37027;&#20040;&#36825;&#20010;&#37325;&#36733;&#20250;&#34987;&#28155;&#21152;&#21040;&#37325;&#36733;&#38598;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> C, <span class="kw1">class</span> F<span class="sy1">&gt;</span>
<span class="kw4">auto</span> test<span class="br0">(</span>C c, F f<span class="br0">)</span> <span class="sy2">-</span><span class="sy1">&gt;</span> decltype<span class="br0">(</span><span class="br0">(</span><span class="kw4">void</span><span class="br0">)</span><span class="br0">(</span><span class="br0">(</span>c<span class="sy2">-</span><span class="sy1">&gt;</span><span class="sy2">*</span>f<span class="br0">)</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span>, <span class="kw4">void</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span>
<span class="br0">{</span>
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;&#35843;&#29992;&#20102;&#25351;&#38024;&#37325;&#36733;<span class="es1">\n</span>&quot;</span><span class="sy4">;</span>
<span class="br0">}</span>
<span class="kw1">struct</span> X <span class="br0">{</span> <span class="kw4">void</span> f<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span><span class="br0">}</span> <span class="br0">}</span><span class="sy4">;</span>
<span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span>
<span class="br0">{</span>
X x<span class="sy4">;</span>
test<span class="br0">(</span>x, <span class="sy3">&amp;</span>X<span class="sy4">::</span><span class="me2">f</span><span class="br0">)</span><span class="sy4">;</span>
test<span class="br0">(</span><span class="sy3">&amp;</span>x, <span class="sy3">&amp;</span>X<span class="sy4">::</span><span class="me2">f</span><span class="br0">)</span><span class="sy4">;</span>
test<span class="br0">(</span><span class="nu0">42</span>, <span class="nu0">1337</span><span class="br0">)</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<p>&#36755;&#20986;&#65306;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="text source-text">
<pre class="de1">&#35843;&#29992;&#20102;&#24341;&#29992;&#37325;&#36733;
&#35843;&#29992;&#20102;&#25351;&#38024;&#37325;&#36733;
&#35843;&#29992;&#20102;&#20445;&#24213;&#37325;&#36733;</pre></div>
</div>
</div>
<h3><span class="mw-headline" id=".E7.BC.BA.E9.99.B7.E6.8A.A5.E5.91.8A">&#32570;&#38519;&#25253;&#21578;</span></h3>
<p>&#19979;&#21015;&#26356;&#25913;&#34892;&#20026;&#30340;&#32570;&#38519;&#25253;&#21578;&#36861;&#28335;&#22320;&#24212;&#29992;&#20110;&#20197;&#21069;&#20986;&#29256;&#30340; C++ &#26631;&#20934;&#12290;</p>
<table class="dsctable" style="font-size:0.8em">
<tr>
<th>DR</th>
<th>&#24212;&#29992;&#20110;</th>
<th>&#20986;&#29256;&#26102;&#30340;&#34892;&#20026;</th>
<th>&#27491;&#30830;&#34892;&#20026;</th>
</tr>
<tr>
<td><a rel="nofollow" class="external text" href="https://wg21.cmeerw.net/cwg/issue295">CWG 295</a></td>
<td>C++98</td>
<td>&#21019;&#24314; cv &#38480;&#23450;&#30340;&#20989;&#25968;&#31867;&#22411;&#21487;&#33021;&#20250;&#23548;&#33268;&#26367;&#25442;&#22833;&#36133;</td>
<td>&#20351;&#20043;&#19981;&#26159;&#22833;&#36133;&#65292;&#33293;&#24323; cv &#38480;&#23450;</td>
</tr>
<tr>
<td><a rel="nofollow" class="external text" href="https://wg21.cmeerw.net/cwg/issue1227">CWG 1227</a></td>
<td>C++98</td>
<td>&#26367;&#25442;&#39034;&#24207;&#26410;&#25351;&#26126;</td>
<td>&#19982;&#35789;&#27861;&#39034;&#24207;&#30456;&#21516;</td>
</tr>
<tr>
<td><a rel="nofollow" class="external text" href="https://wg21.cmeerw.net/cwg/issue2322">CWG 2322</a></td>
<td>C++11</td>
<td>&#19981;&#21516;&#35789;&#27861;&#39034;&#24207;&#30340;&#22768;&#26126;&#20250;&#23548;&#33268;&#27169;&#26495;&#23454;&#20363;&#21270;&#20197;&#19981;&#21516;&#39034;&#24207;&#25110;&#23436;&#20840;&#19981;&#20986;&#29616;</td>
<td>&#36825;&#31181;&#24773;&#20917;&#20026;&#35884;&#26500;&#65292;&#19981;&#35201;&#27714;&#35786;&#26029;</td>
</tr>
</table>
</div>
<div class="visualClear"></div>
</div>
</div>
</div>
</body>
</html>