{"id":470,"date":"2017-06-29T07:23:30","date_gmt":"2017-06-29T07:23:30","guid":{"rendered":"http:\/\/imalogic.com\/blog\/?p=470"},"modified":"2017-06-29T07:26:13","modified_gmt":"2017-06-29T07:26:13","slug":"c14-whats-important","status":"publish","type":"post","link":"https:\/\/imalogic.com\/blog\/2017\/06\/29\/c14-whats-important\/","title":{"rendered":"C++14: What&#8217;s Important"},"content":{"rendered":"<body><p><\/p>\n<h4 class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><a href=\"https:\/\/i0.wp.com\/imalogic.com\/blog\/wp-content\/uploads\/2017\/06\/cpp_logo.png?ssl=1\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"472\" data-permalink=\"https:\/\/imalogic.com\/blog\/2017\/06\/29\/c14-whats-important\/cpp_logo\/\" data-orig-file=\"https:\/\/i0.wp.com\/imalogic.com\/blog\/wp-content\/uploads\/2017\/06\/cpp_logo.png?fit=360%2C405&amp;ssl=1\" data-orig-size=\"360,405\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"cpp_logo\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/imalogic.com\/blog\/wp-content\/uploads\/2017\/06\/cpp_logo.png?fit=360%2C405&amp;ssl=1\" class=\"size-medium wp-image-472 alignright\" src=\"https:\/\/i0.wp.com\/imalogic.com\/blog\/wp-content\/uploads\/2017\/06\/cpp_logo.png?resize=267%2C300&#038;ssl=1\" alt=\"\" width=\"267\" height=\"300\" loading=\"lazy\" srcset=\"https:\/\/i0.wp.com\/imalogic.com\/blog\/wp-content\/uploads\/2017\/06\/cpp_logo.png?resize=267%2C300&amp;ssl=1 267w, https:\/\/i0.wp.com\/imalogic.com\/blog\/wp-content\/uploads\/2017\/06\/cpp_logo.png?w=360&amp;ssl=1 360w\" sizes=\"auto, (max-width: 267px) 100vw, 267px\" \/><\/a>Return type deduction<\/span><\/span><\/h4>\n<p><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">The capabilities\u00a0<\/span><\/span><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">auto<\/span><\/span><\/code><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">\u00a0are expanded in this release. C++ itself continues to be typesafe, but the mechanics of type safety are increasingly being performed by the compiler instead of the programmer.<\/span><\/span><\/p>\n<p><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">In C++11, programmers starting using\u00a0<\/span><\/span><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">auto<\/span><\/span><\/code><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">\u00a0for declarations. This was keenly appreciated for things like iterator creation, when the fully qualified type name might be horrendous. Newly minted C++ code was much easier to read:<\/span><\/span><\/p>\n<div id=\"highlighter_953563\" dir=\"LTR\">\n<table border=\"0\" width=\"365\" cellspacing=\"0\" cellpadding=\"0\">\n<colgroup>\n<col width=\"10\">\n<col width=\"355\"> <\/colgroup>\n<tbody>\n<tr>\n<td width=\"10\"><\/td>\n<td width=\"355\">\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>for<\/b><\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">(<br>\nauto ii = collection.begin() ; ...<\/span><\/span><\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">In C++14, the use of\u00a0<\/span><\/span><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">auto<\/span><\/span><\/code><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">\u00a0is expanded in a couple of ways. One that makes perfect sense is that of\u00a0<\/span><\/span><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><i>return type deduction<\/i><\/span><\/span><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">. If I write a line of code like this inside a function:<\/span><\/span><\/p>\n<div id=\"highlighter_691773\" dir=\"LTR\">\n<table border=\"0\" width=\"109\" cellspacing=\"0\" cellpadding=\"0\">\n<colgroup>\n<col width=\"10\">\n<col width=\"99\"> <\/colgroup>\n<tbody>\n<tr>\n<td width=\"10\"><\/td>\n<td width=\"99\">\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>return<\/b><\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">1.4;<\/span><\/span><\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">It is obvious to both me and the compiler that the function is returning a\u00a0<\/span><\/span><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">double<\/span><\/span><\/code><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">. So in C++14, I can define the function return type as\u00a0<\/span><\/span><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">auto<\/span><\/span><\/code><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">\u00a0instead of\u00a0<\/span><\/span><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">double<\/span><\/span><\/code><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">:<\/span><\/span><\/p>\n<div id=\"highlighter_353460\" dir=\"LTR\">\n<table border=\"0\" width=\"162\" cellspacing=\"0\" cellpadding=\"0\">\n<colgroup>\n<col width=\"10\">\n<col width=\"152\"> <\/colgroup>\n<tbody>\n<tr>\n<td width=\"10\"><\/td>\n<td width=\"152\">\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">auto<br>\ngetvalue() {<\/span><\/span><\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">The\u00a0<\/span><\/span><a href=\"http:\/\/www.open-std.org\/jtc1\/sc22\/wg21\/docs\/papers\/2013\/n3638.html\"><span style=\"color: #003bb0;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><u>details<\/u><\/span><\/span><\/a><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">\u00a0of this new feature are pretty easy to understand. For example, if a function has multiple return paths, they need to have the same type. Code like this:<\/span><\/span><\/p>\n<div id=\"highlighter_105477\" dir=\"LTR\">\n<table border=\"0\" width=\"140\" cellspacing=\"0\" cellpadding=\"0\">\n<colgroup>\n<col width=\"10\">\n<col width=\"130\"> <\/colgroup>\n<tbody>\n<tr>\n<td width=\"10\"><\/td>\n<td width=\"130\">\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">auto<br>\nf(<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #808080;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>int<\/b><\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">i)<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">{<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>if<\/b><\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">(<br>\ni &lt; 0 )<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>return<\/b><\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">-1;<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>else<\/b><\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>return<\/b><\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">2.0<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">}<\/span><\/span><\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">might seem like it should obviously have a deduced return type of\u00a0<\/span><\/span><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">double<\/span><\/span><\/code><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">, but the standard prohibits this ambiguity, and the compiler property complains:<\/span><\/span><\/p>\n<pre class=\"western\"><span style=\"color: #000000;\">error_01.cpp:6:5: error: 'auto' in return type deduced as 'double' here but deduced as 'int' in<\/span>\r\n<span style=\"color: #000000;\">      earlier return statement<\/span>\r\n<span style=\"color: #000000;\">    return 2.0<\/span>\r\n<span style=\"color: #000000;\">    ^<\/span>\r\n<span style=\"color: #000000;\">1 error generated.<\/span><\/pre>\n<p><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">There several good reasons why deducing the return type is a plus for your C++ programs. First, there are times when you need to return a fairly complex type, such as an iterator, perhaps when searching into a standard library container. The\u00a0<\/span><\/span><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">auto<\/span><\/span><\/code><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">\u00a0return type makes the function easier to write properly, and easier to read. A second (maybe less obvious) reason is that using an\u00a0<\/span><\/span><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">auto<br>\n<\/span><\/span><\/code><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">return type enhances your ability to refactor. As an example, consider this program:<\/span><\/span><\/p>\n<div id=\"highlighter_924667\" dir=\"LTR\">\n<table border=\"0\" width=\"580\" cellspacing=\"0\" cellpadding=\"0\">\n<colgroup>\n<col width=\"19\">\n<col width=\"561\"> <\/colgroup>\n<tbody>\n<tr>\n<td width=\"19\"><\/td>\n<td width=\"561\">\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #808080;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">#include<br>\n&lt;iostream&gt;<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #808080;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">#include<br>\n&lt;vector&gt;<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #808080;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">#include<br>\n&lt;string&gt;<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>struct<\/b><\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">record<br>\n{<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">std::string<br>\nname;<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #808080;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>int<\/b><\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">id;<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">};<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">auto<br>\nfind_id(<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>const<\/b><\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">std::vector&lt;record&gt;<br>\n&amp;people,<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>const<\/b><\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">std::string<br>\n&amp;name)<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">{<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">auto<br>\nmatch_name = [&amp;name](<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>const<\/b><\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">record&amp;<br>\nr) -&gt; <\/span><\/span><\/code><code class=\"western\"><span style=\"color: #808080;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>bool<\/b><\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">{<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>return<\/b><\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">r.name<br>\n== name;<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">};<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">auto<br>\nii = find_if(people.begin(), people.end(), match_name );<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>if<\/b><\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">(ii<br>\n== people.end())<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>return<\/b><\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">-1;<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>else<\/b><\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>return<\/b><\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">ii-&gt;id;<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">}<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #808080;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>int<\/b><\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">main()<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">{<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">std::vector&lt;record&gt;<br>\nroster = { {<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #0000ff;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">\"mark\"<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">,1},<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">{<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #0000ff;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">\"bill\"<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">,2},<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">{<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #0000ff;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">\"ted\"<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">,3}};<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">std::cout<br>\n&lt;&lt; find_id(roster,<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #0000ff;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">\"bill\"<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">)<br>\n&lt;&lt; <\/span><\/span><\/code><code class=\"western\"><span style=\"color: #0000ff;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">\"\\n\"<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">;<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">std::cout<br>\n&lt;&lt; find_id(roster,<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #0000ff;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">\"ron\"<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">)<br>\n&lt;&lt; <\/span><\/span><\/code><code class=\"western\"><span style=\"color: #0000ff;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">\"\\n\"<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">;<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">}<\/span><\/span><\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">In this example, I\u2019m not saving many brain cells by having\u00a0<\/span><\/span><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">find_id()<\/span><\/span><\/code><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">\u00a0return\u00a0<\/span><\/span><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">auto<\/span><\/span><\/code><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">\u00a0instead of\u00a0<\/span><\/span><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">int<\/span><\/span><\/code><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">. But consider what happens if I decide that I want to refactor my\u00a0<\/span><\/span><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">record<\/span><\/span><\/code><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">\u00a0structure. Instead of using an integral type to identify the person in the\u00a0<\/span><\/span><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">record<\/span><\/span><\/code><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">\u00a0object, maybe I have a new\u00a0<\/span><\/span><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">GUID<\/span><\/span><\/code><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">\u00a0type:<\/span><\/span><\/p>\n<div id=\"highlighter_454364\" dir=\"LTR\">\n<table border=\"0\" width=\"192\" cellspacing=\"0\" cellpadding=\"0\">\n<colgroup>\n<col width=\"10\">\n<col width=\"182\"> <\/colgroup>\n<tbody>\n<tr>\n<td width=\"10\"><\/td>\n<td width=\"182\">\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>struct<\/b><\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">record<br>\n{<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">std::string<br>\nname;<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">GUID<br>\nid;<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">};<\/span><\/span><\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">Making that change to the\u00a0<\/span><\/span><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">record<\/span><\/span><\/code><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">\u00a0object will cause a series of cascading changes in things like the return types of functions. But if my function uses automatic return type deduction, the compiler will silently make the change for me.<\/span><\/span><\/p>\n<h4 class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">Generic Lambdas<\/span><\/span><\/h4>\n<p><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">Another place where\u00a0<\/span><\/span><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">auto<\/span><\/span><\/code><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">\u00a0has insinuated itself is in the definitions of lambda parameters. Defining lambda parameters with an\u00a0<\/span><\/span><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">auto<\/span><\/span><\/code><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">\u00a0type declaration is the loose equivalent of creating a template function. The lambda will be instantiated in a specific embodiment based on the deduced types of the arguments.<\/span><\/span><\/p>\n<p><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">This is convenient for creating lambdas that can be reused in different contexts. In the simple example below, I\u2019ve created a lambda used as a predicate in a standard library function. In the C++11 world, I would have needed to explicitly instantiate one lambda for adding integers, and a second for adding strings.<\/span><\/span><\/p>\n<p><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">With the addition of generic lambdas, I can define a single lambda with generic parameters. Although the syntax doesn\u2019t include the keyword\u00a0<\/span><\/span><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">template<\/span><\/span><\/code><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">, this is still clearly a further extension of C++ generic programming:<\/span><\/span><\/p>\n<div id=\"highlighter_981954\" dir=\"LTR\">\n<table border=\"0\" width=\"555\" cellspacing=\"0\" cellpadding=\"0\">\n<colgroup>\n<col width=\"19\">\n<col width=\"536\"> <\/colgroup>\n<tbody>\n<tr>\n<td width=\"19\"><\/td>\n<td width=\"536\">\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #808080;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">#include<br>\n&lt;iostream&gt;<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #808080;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">#include<br>\n&lt;vector&gt;<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #808080;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">#include<br>\n&lt;string&gt;<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #808080;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">#include<br>\n&lt;numeric&gt;<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #808080;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>int<\/b><\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">main()<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">{<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">std::vector&lt;<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #808080;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>int<\/b><\/span><\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">&gt;<br>\nivec = { 1, 2, 3, 4};<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">std::vector&lt;std::string&gt;<br>\nsvec = { <\/span><\/span><\/code><code class=\"western\"><span style=\"color: #0000ff;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">\"red\"<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">,<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #0000ff;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">\"green\"<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">,<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #0000ff;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">\"blue\"<\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">};<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">auto<br>\nadder\u00a0 = [](auto op1, auto op2){ <\/span><\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>return<\/b><\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">op1<br>\n+ op2; };<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">std::cout<br>\n&lt;&lt; <\/span><\/span><\/code><code class=\"western\"><span style=\"color: #0000ff;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">\"int<br>\nresult : \"<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">&lt;&lt;<br>\nstd::accumulate(ivec.begin(),<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">ivec.end(),<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">0,<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">adder<br>\n)<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">&lt;&lt;<br>\n<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #0000ff;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">\"\\n\"<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">;<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">std::cout<br>\n&lt;&lt; <\/span><\/span><\/code><code class=\"western\"><span style=\"color: #0000ff;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">\"string<br>\nresult : \"<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">&lt;&lt;<br>\nstd::accumulate(svec.begin(),<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">svec.end(),<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">std::string(<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #0000ff;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">\"\"<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">),<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">adder<br>\n)<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">&lt;&lt;<br>\n<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #0000ff;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">\"\\n\"<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">;<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>return<\/b><\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">0;<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">}<\/span><\/span><\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">Which produces the following output:<\/span><\/span><\/p>\n<div id=\"highlighter_587924\" dir=\"LTR\">\n<table border=\"0\" width=\"259\" cellspacing=\"0\" cellpadding=\"0\">\n<colgroup>\n<col width=\"10\">\n<col width=\"249\"> <\/colgroup>\n<tbody>\n<tr>\n<td width=\"10\"><\/td>\n<td width=\"249\">\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #808080;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>int<\/b><\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">result<br>\n: 10<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">string<br>\nresult : redgreenblue<\/span><\/span><\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">Even if you are instantiating anonymous inline lambdas, employing generic parameters is still useful for the reasons I discussed earlier in this article. When your data structures change, or functions in your APIs get signature modifications, generic lambdas will adjust with recompilation instead of requiring rewrites:<\/span><\/span><\/p>\n<div id=\"highlighter_165678\" dir=\"LTR\">\n<table border=\"0\" width=\"643\" cellspacing=\"0\" cellpadding=\"0\">\n<colgroup>\n<col width=\"10\">\n<col width=\"632\"> <\/colgroup>\n<tbody>\n<tr>\n<td width=\"10\"><\/td>\n<td width=\"632\">\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">std::cout<br>\n&lt;&lt; <\/span><\/span><\/code><code class=\"western\"><span style=\"color: #0000ff;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">\"string<br>\nresult : \"<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">&lt;&lt;<br>\nstd::accumulate(svec.begin(),<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">svec.end(),<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">std::string(<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #0000ff;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">\"\"<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">),<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">[](auto<br>\nop1,auto op2){ <\/span><\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>return<\/b><\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">op1+op2;<br>\n} )<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">&lt;&lt;<br>\n<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #0000ff;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">\"\\n\"<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">;<\/span><\/span><\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h4 class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">Initialized Lambda Captures<\/span><\/span><\/h4>\n<p><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">In C++11, we had to start adjusting to the notion of a\u00a0<i>lambda capture<\/i>\u00a0specification. That declaration guides the compiler during the creation of the\u00a0<i>closure<\/i>: an instance of the function defined by the lambda, along with bindings to variables defined outside the lambda\u2019s scope.<\/span><\/span><\/p>\n<p><span style=\"color: #000000;\"><span style=\"font-family: Arial, Helvetica, Verdana, sans-serif;\"><span style=\"font-size: large;\"><b>New, useful features that make the language safer and more convenient.<\/b><br>\n<\/span><\/span><\/span><\/p>\n<p><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">In the earlier example on deduced return types, I had a lambda definition that captured a single variable,\u00a0<\/span><\/span><\/span><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">name<\/span><\/span><\/span><\/code><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">, used as the source of a search string in a predicate:<\/span><\/span><\/span><\/p>\n<div id=\"highlighter_299089\" dir=\"LTR\">\n<table border=\"0\" width=\"552\" cellspacing=\"0\" cellpadding=\"0\">\n<colgroup>\n<col width=\"10\">\n<col width=\"541\"> <\/colgroup>\n<tbody>\n<tr>\n<td width=\"10\"><\/td>\n<td width=\"541\">\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">auto<br>\nmatch_name = [&amp;name](<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>const<\/b><\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">record&amp;<br>\nr) -&gt; <\/span><\/span><\/code><code class=\"western\"><span style=\"color: #808080;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>bool<\/b><\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">{<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>return<\/b><\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">r.name<br>\n== name;<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">};<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">auto<br>\nii = find_if(people.begin(), people.end(), match_name );<\/span><\/span><\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">This particular capture gives the lambda access to the variable by reference. Captures can also be performed by value, and in both cases, the use of the variable behaves in a way that fits with C++ intuition. Capture by value means the lambda operates on a local copy of a variable; capture by reference means the lambda operates on the actual instance of the variable from the outer scope.<\/span><\/span><\/span><\/p>\n<p><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">All this is fine, but it comes with some limitations. I think the one that the committee felt it needed to address was the inability to initialize captured variables using move-only semantics.<\/span><\/span><\/span><\/p>\n<p><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">What does this mean? If we expect that lambda is going to be a\u00a0<\/span><\/span><\/span><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\"><i>sink<\/i><\/span><\/span><\/span><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">\u00a0for a parameter, we would like to capture the outer variable using move semantics. As an example, consider how you would get a lambda to sink a\u00a0<\/span><\/span><\/span><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">unique_ptr<\/span><\/span><\/span><\/code><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">, which is a move-only object. A first attempt to capture by value fails:<\/span><\/span><\/span><\/p>\n<div id=\"highlighter_69828\" dir=\"LTR\">\n<table border=\"0\" width=\"517\" cellspacing=\"0\" cellpadding=\"0\">\n<colgroup>\n<col width=\"10\">\n<col width=\"507\"> <\/colgroup>\n<tbody>\n<tr>\n<td width=\"10\"><\/td>\n<td width=\"507\">\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">std::unique_ptr&lt;<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #808080;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>int<\/b><\/span><\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">&gt;<br>\np(<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>new<\/b><\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #808080;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>int<\/b><\/span><\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">);<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">*p<br>\n= 11;<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">auto<br>\ny = [p]() { std::cout &lt;&lt; <\/span><\/span><\/code><code class=\"western\"><span style=\"color: #0000ff;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">\"inside:<br>\n\"<\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">&lt;&lt;<br>\n*p &lt;&lt; <\/span><\/span><\/code><code class=\"western\"><span style=\"color: #0000ff;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">\"\\n\"<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">;};<\/span><\/span><\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">This code generates a compiler error because\u00a0<\/span><\/span><\/span><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">unique_ptr<\/span><\/span><\/span><\/code><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">\u00a0does not generate a copy constructor \u2014 it specifically wants to ban making copies.<\/span><\/span><\/span><\/p>\n<p><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">Changing this so that\u00a0<\/span><\/span><\/span><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">p<\/span><\/span><\/span><\/code><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">\u00a0is captured by reference compiles fine, but it doesn\u2019t have the desired effect of sinking the value by moving the value into the local copy. Eventually, you could accomplish this by creating a local variable and calling\u00a0<\/span><\/span><\/span><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">std::move()<\/span><\/span><\/span><\/code><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">\u00a0on your captured reference, but this is a bit inefficient.<\/span><\/span><\/span><\/p>\n<p><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">The fix for this is a modification of the capture clause syntax. Now, instead of just declaring a capture variable, you can do an initialization. The simple case that is used as an example in the standard looks like this:<\/span><\/span><\/span><\/p>\n<div id=\"highlighter_574855\" dir=\"LTR\">\n<table border=\"0\" width=\"358\" cellspacing=\"0\" cellpadding=\"0\">\n<colgroup>\n<col width=\"10\">\n<col width=\"348\"> <\/colgroup>\n<tbody>\n<tr>\n<td width=\"10\"><\/td>\n<td width=\"348\">\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">auto<br>\ny = [&amp;r = x, x = x+1]()-&gt;<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #808080;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>int<\/b><\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">{...}<\/span><\/span><\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">This captures a copy of\u00a0<\/span><\/span><\/span><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">x<\/span><\/span><\/span><\/code><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">\u00a0and increments the value simultaneously. The example is easy to understand, but I\u2019m not sure it captures the value of this new syntax for sinking move-only variables. A use case that takes advantage of this shown here:<\/span><\/span><\/span><\/p>\n<div id=\"highlighter_989992\" dir=\"LTR\">\n<table border=\"0\" width=\"643\" cellspacing=\"0\" cellpadding=\"0\">\n<colgroup>\n<col width=\"19\">\n<col width=\"623\"> <\/colgroup>\n<tbody>\n<tr>\n<td width=\"19\"><\/td>\n<td width=\"623\">\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #808080;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">#include<br>\n&lt;memory&gt;<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #808080;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">#include<br>\n&lt;iostream&gt;<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #808080;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>int<\/b><\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">main()<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">{<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">std::unique_ptr&lt;<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #808080;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>int<\/b><\/span><\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">&gt;<br>\np(<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>new<\/b><\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #808080;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>int<\/b><\/span><\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">);<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #808080;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>int<\/b><\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">x<br>\n= 5;<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">*p<br>\n= 11;<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">auto<br>\ny = [p=std::move(p)]() { std::cout &lt;&lt; <\/span><\/span><\/code><code class=\"western\"><span style=\"color: #0000ff;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">\"inside:<br>\n\"<\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">&lt;&lt;<br>\n*p &lt;&lt; <\/span><\/span><\/code><code class=\"western\"><span style=\"color: #0000ff;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">\"\\n\"<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">;};<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">y();<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">std::cout<br>\n&lt;&lt; <\/span><\/span><\/code><code class=\"western\"><span style=\"color: #0000ff;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">\"outside:<br>\n\"<\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">&lt;&lt;<br>\n*p &lt;&lt; <\/span><\/span><\/code><code class=\"western\"><span style=\"color: #0000ff;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">\"\\n\"<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">;<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>return<\/b><\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">0;<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">}<\/span><\/span><\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">In this case, the captured value\u00a0<\/span><\/span><\/span><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">p<\/span><\/span><\/span><\/code><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">\u00a0is initialized using move semantics, effectively sinking the pointer without the need to declare a local variable:<\/span><\/span><\/span><\/p>\n<pre class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">inside: 11<\/span><\/span><\/span>\r\n<span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">Segmentation fault (core dumped)<\/span><\/span><\/span><\/pre>\n<p><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">That annoying result is what you expect \u2014 the code attempts to dereference\u00a0<\/span><\/span><\/span><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">p<\/span><\/span><\/span><\/code><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">\u00a0after it was captured and moved into the lambda.<\/span><\/span><\/span><\/p>\n<h4 class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">The\u00a0<\/span><\/span><\/span><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">[[deprecated]]<\/span><\/span><\/span><\/code><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">\u00a0Attribute<\/span><\/span><\/span><\/h4>\n<p><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">The first time I saw the use of the deprecated attribute in Java, I admit to a bit of language envy. Code rot is a huge problem for most programmers. (Ever been praised for deleting code? Me neither.) This new attribute provides a systematic way to attack it.<\/span><\/span><\/span><\/p>\n<p><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">Its use is convenient and simple \u2014 just place the\u00a0<\/span><\/span><\/span><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">[[deprecated]]<\/span><\/span><\/span><\/code><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">\u00a0tag in front of a declaration \u2014 which can be a class, variable, function, or a few other things. The result looks like this:<\/span><\/span><\/span><\/p>\n<div id=\"highlighter_30524\" dir=\"LTR\">\n<table border=\"0\" width=\"206\" cellspacing=\"0\" cellpadding=\"0\">\n<colgroup>\n<col width=\"10\">\n<col width=\"196\"> <\/colgroup>\n<tbody>\n<tr>\n<td width=\"10\"><\/td>\n<td width=\"196\">\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>class<\/b><\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">[[<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>deprecated<\/b><\/span><\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">]]<br>\nflaky {<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">};<\/span><\/span><\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">When your program uses a deprecated entity, the compiler\u2019s reaction is left up to the implementer. Clearly, most people are going to want to see some sort of warning, and also to be able to turn that warning off at will. As an example, clang 3.4 gave this warning when instantiating a deprecated class:<\/span><\/span><\/span><\/p>\n<div id=\"highlighter_376507\" dir=\"LTR\">\n<table border=\"0\" width=\"643\" cellspacing=\"0\" cellpadding=\"0\">\n<colgroup>\n<col width=\"10\">\n<col width=\"632\"> <\/colgroup>\n<tbody>\n<tr>\n<td width=\"10\"><\/td>\n<td width=\"632\">\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">dep.cpp:14:3:<br>\nwarning: <\/span><\/span><\/code><code class=\"western\"><span style=\"color: #0000ff;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">'flaky'<\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">is<br>\n<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>deprecated<\/b><\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">[-Wdeprecated-declarations]<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">flaky<br>\nf;<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">^<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">dep.cpp:3:1:<br>\nnote: <\/span><\/span><\/code><code class=\"western\"><span style=\"color: #0000ff;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">'flaky'<\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">declared<br>\nhere<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">flaky<br>\n{<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">^<\/span><\/span><\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">Note that the syntax of C++\u00a0<\/span><\/span><\/span><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\"><i>attribute-tokens<\/i><\/span><\/span><\/span><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">\u00a0might seem a bit unfamiliar. The list of attributes, including\u00a0<\/span><\/span><\/span><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">[[deprecated]]<\/span><\/span><\/span><\/code><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">, comes after keywords like\u00a0<\/span><\/span><\/span><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">class<\/span><\/span><\/span><\/code><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">\u00a0or\u00a0<\/span><\/span><\/span><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">enum<\/span><\/span><\/span><\/code><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">, and before the entity name.<\/span><\/span><\/span><\/p>\n<p><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">This tag has an alternate form that includes a message parameter. Again, it is up to the implementer to decide what to do with this message. clang 3.4 apparently ignores the message. The output from this fragment:<\/span><\/span><\/span><\/p>\n<div id=\"highlighter_415322\" dir=\"LTR\">\n<table border=\"0\" width=\"552\" cellspacing=\"0\" cellpadding=\"0\">\n<colgroup>\n<col width=\"19\">\n<col width=\"533\"> <\/colgroup>\n<tbody>\n<tr>\n<td width=\"19\"><\/td>\n<td width=\"533\">\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>class<\/b><\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">[[<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>deprecated<\/b><\/span><\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">]]<br>\nflaky {<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">};<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><span style=\"color: #000000;\">\u00a0<\/span><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">[[<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>deprecated<\/b><\/span><\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">(<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #0000ff;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">\"Consider<br>\nusing something other than cranky\"<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">)]]<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #808080;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>int<\/b><\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">cranky()<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">{<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>return<\/b><\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">0;<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">}<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><span style=\"color: #000000;\">\u00a0<\/span><code class=\"western\"><span style=\"color: #808080;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>int<\/b><\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">main()<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">{<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">flaky<br>\nf;<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>return<\/b><\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">cranky();<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">}<\/span><\/span><\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">does not contain the error message:<\/span><\/span><\/span><\/p>\n<pre class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">dep.cpp:14:10: warning: 'cranky' is deprecated [-Wdeprecated-declarations]<\/span><\/span><\/span>\r\n<span style=\"color: #000000;\">  <span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">return cranky();<\/span><\/span><\/span>\r\n<span style=\"color: #000000;\">         <span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">^<\/span><\/span><\/span>\r\n<span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">dep.cpp:6:5: note: 'cranky' declared here<\/span><\/span><\/span>\r\n<span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">int cranky()<\/span><\/span><\/span>\r\n<span style=\"color: #000000;\">    <span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">^<\/span><\/span><\/span><\/pre>\n<h4 class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">Binary Literals and Digit Separators<\/span><\/span><\/span><\/h4>\n<p><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">These two new features aren\u2019t earth-shaking, but they do represent nice syntactic improvements. Small changes like these give us some incremental improvements in the language that improve readability, and hence, reduce bug counts.<\/span><\/span><\/span><\/p>\n<p><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">C++ programmers can now create binary literals, adding to the existing canon of decimal, hex, and the rarely used octal radices. Binary literals start with the prefix\u00a0<\/span><\/span><\/span><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">0b<\/span><\/span><\/span><\/code><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">\u00a0and are followed by binary digits.<\/span><\/span><\/span><\/p>\n<p><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">In the U.S. and UK, we are accustomed to using commas as digit separators in written numbers, as in: $1,000,000. These digit separators are there purely for the convenience of readers, providing syntactic cues that make it easier for our brains to process long strings of numbers.<\/span><\/span><\/span><\/p>\n<p><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">The committee added digit separators to C++ for exactly the same reasons. They won\u2019t affect the evaluation of a number, they are simply present to make it easier to read and write numbers through\u00a0<\/span><\/span><\/span><a href=\"http:\/\/en.wikipedia.org\/wiki\/Chunking_(psychology)\"><span style=\"color: #003bb0;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\"><u>chunking<\/u><\/span><\/span><\/span><\/a><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">.<\/span><\/span><\/span><\/p>\n<p><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">What character to use for a digit separator? Virtually every punctuation character already has an idiosyncratic use in the language, so there are no obvious choices. The final election was to use the single quote character, making the million dollar value render in C++ as:\u00a0<\/span><\/span><\/span><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">1'000'000.00<\/span><\/span><\/span><\/code><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">. Remember that the separators don\u2019t have any effect on the evaluation of the constant, so this value would be identical to\u00a0<\/span><\/span><\/span><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">1'0'00'0'00.00<\/span><\/span><\/span><\/code><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">.<\/span><\/span><\/span><\/p>\n<p><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">An example combining the use of both new features:<\/span><\/span><\/span><\/p>\n<div id=\"highlighter_85227\" dir=\"LTR\">\n<table border=\"0\" width=\"353\" cellspacing=\"0\" cellpadding=\"0\">\n<colgroup>\n<col width=\"19\">\n<col width=\"334\"> <\/colgroup>\n<tbody>\n<tr>\n<td width=\"19\"><\/td>\n<td width=\"334\">\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #808080;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">#include<br>\n&lt;iostream&gt;<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><span style=\"color: #000000;\">\u00a0<\/span><code class=\"western\"><span style=\"color: #808080;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>int<\/b><\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">main()<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">{<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #808080;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>int<\/b><\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">val<br>\n= 0b11110000;<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">std::cout<br>\n&lt;&lt; <\/span><\/span><\/code><code class=\"western\"><span style=\"color: #0000ff;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">\"Output<br>\nmask: \"<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">&lt;&lt;<br>\n0b1000<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #0000ff;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">'0001'<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">1000'0000<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">&lt;&lt;<br>\n<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #0000ff;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">\"\\n\"<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">;<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">std::cout<br>\n&lt;&lt; <\/span><\/span><\/code><code class=\"western\"><span style=\"color: #0000ff;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">\"Proposed<br>\nsalary: $\"<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">&lt;&lt;<br>\n300'000.00<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">&lt;&lt;<br>\n<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #0000ff;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">\"\\n\"<\/span><\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">;<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\">\u00a0\u00a0<\/span><\/code><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\"><b>return<\/b><\/span><\/span><\/code> <code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">0;<\/span><\/span><\/code><\/p>\n<p align=\"LEFT\"><code class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;\">}<\/span><\/span><\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">This program gives the unsurprising output:<\/span><\/span><\/span><\/p>\n<pre class=\"western\"><span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">Output mask: 33152<\/span><\/span><\/span>\r\n<span style=\"color: #000000;\"><span style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\"><span style=\"font-size: large;\">Proposed salary: $300000<\/span><\/span><\/span><\/pre>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<\/body>","protected":false},"excerpt":{"rendered":"<p>Return type deduction The capabilities\u00a0auto\u00a0are expanded in this release. C++ itself continues to be typesafe, but the mechanics of type<\/p>\n","protected":false},"author":1,"featured_media":472,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[7],"tags":[],"class_list":["post-470","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-coding"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/imalogic.com\/blog\/wp-content\/uploads\/2017\/06\/cpp_logo.png?fit=360%2C405&ssl=1","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p8J21V-7A","jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/imalogic.com\/blog\/wp-json\/wp\/v2\/posts\/470","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/imalogic.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/imalogic.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/imalogic.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/imalogic.com\/blog\/wp-json\/wp\/v2\/comments?post=470"}],"version-history":[{"count":1,"href":"https:\/\/imalogic.com\/blog\/wp-json\/wp\/v2\/posts\/470\/revisions"}],"predecessor-version":[{"id":473,"href":"https:\/\/imalogic.com\/blog\/wp-json\/wp\/v2\/posts\/470\/revisions\/473"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/imalogic.com\/blog\/wp-json\/wp\/v2\/media\/472"}],"wp:attachment":[{"href":"https:\/\/imalogic.com\/blog\/wp-json\/wp\/v2\/media?parent=470"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/imalogic.com\/blog\/wp-json\/wp\/v2\/categories?post=470"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/imalogic.com\/blog\/wp-json\/wp\/v2\/tags?post=470"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}