    <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/">
     <channel>
        <title>ACCU  :: Auto â€“ A Necessary Evil?</title>
        <link>https://members.accu.org/index.php/articles/1859</link>
        <description>Professionalism in Programming</description>
        <dc:language>en-us</dc:language> 
        <dc:creator>Administrator</dc:creator> 
        <admin:generatorAgent rdf:resource="http://www.xaraya.org" /> 
        <admin:errorReportsTo rdf:resource="mailto:webeditor@accu.org" />
       <sy:updatePeriod>hourly</sy:updatePeriod>
       <sy:updateFrequency>1</sy:updateFrequency>
       <docs>http://backend.userland.com/rss</docs>




<div class="xar-mod-head"><span class="xar-mod-title">Programming Topics + Overload Journal #115 - June 2013</span></div>

<table border="0" cellpadding="1" cellspacing="0">
    <tbody>
    <tr>
        <td valign="top">
            Browse in :
       </td>
       <td valign="top">

                                            <a href="https://members.accu.org/index.php/articles/">All</a>

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c13/">Topics</a>

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c65/">Programming</a>
<br />

                                            <a href="https://members.accu.org/index.php/articles/">All</a>

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c76/">Journals</a>

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c78/">Overload</a>

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c324/">o115</a>
<br />

                                            <a href="https://members.accu.org/index.php/articles/c65-324/">Any of these categories</a>

                    -                        <a href="https://members.accu.org/index.php/articles/c65+324/">All of these categories</a>
<br />
</td>
   </tr>
   </tbody>
</table>




<div class="xar-error">
   <p>
 <strong>Note:</strong> when you create a new publication type,
the articles module will automatically use the templates
<em>user-display-[publicationtype].xt</em>
and <em>user-summary-[publicationtype].xt</em>.
If those templates do not exist when you try to preview or display a new article,
you'll get this warning :-)  Please place your own templates in themes/<em>yourtheme</em>/modules/articles . The templates will get the extension .xt there. </p>
</div>
<div class="xar-norm xar-standard-box-padding">
   <h1><strong>Title:</strong>&nbsp;Auto â€“ A Necessary Evil?</h1>
<p><strong>Author:</strong>&nbsp;Martin Moene</p>
<p>
<strong>Date:</strong> 06 June 2013 18:25:03 +01:00 or Thu, 06 June 2013 18:25:03 +01:00</p>
<p><strong>Summary:</strong>&nbsp;Superficially simple language features can be surprisingly complicated. Roger Orr explores a new one that is likely to be used widely.</p>
<p><strong>Body:</strong>&nbsp;<p class="quote">To have a right to do a thing<br /> is not at all the same<br />as to be right in doing it</p>
<p class="quote"> ~ G.K.Chesterton</p>

<p>The keyword <code>auto</code> has a new use in C++11 â€“ although the suggestion has been under discussion for a while, as we shall see. It was one of the early proposals for addition to what was then called C++0x and, since it was both useful and (relatively) non-controversial, some compilers added support for it well before the completion of C++11. This does have the advantage that it has had â€˜field testingâ€™ by a large number of programmers and so the form of the feature in the new International Standard seems to be pretty solid.</p>

<p>The keyword <code>auto</code> now lets you declare variables where the <em>compiler</em> provides the actual type and the programmer is either unwilling or unable to <em>name</em> the actual type. The keyword can also be used in function definitions to let you provide the return type <em>after</em> the rest of the function declaration, which is useful when the return type depends on the type of the arguments.</p>

<p>As with any new keyword there are questions about usage â€“ at two levels. First of all, where and how are programmers <em>permitted</em> to use the new feature. Secondly, what guidance is there to sensible <em>adoption</em> of the new feature. I intend to start with by answering the first question and then subsequently focus on the second.</p>

<h2>A bit of history</h2>

<p>The word <code>auto</code> has been re-purposed in C++11 â€“ it was inherited from C where it has been a keyword since the first days of <em>The C Programming Language</em> by Kernighan and Ritchie.</p>

<p>The old meaning of <code>auto</code> was defined as follows:</p>

&lt;Quote&gt;
<a id="pgfId-1008288"></a>
Local objects explicitly declared <code>auto</code> or <code>register</code> or not explicitly declared <code>static</code>
 or <code>extern</code> have automatic storage duration. The storage for these objects lasts until the block in which they are created exits.&lt;/Quote&gt;
 
<p>This meant that the keyword essentially added nothing over an implicit declaration:</p>

<pre class="programlisting">
  {
    auto int i; // explicitly automatic
    int j;      // implicitly automatic
    // ...
  } 
  // end of life for both i and j
</pre>

<p>and so in practice <code>auto</code> was almost never used in production code.</p>

<p>When Bjarne Stroustrup started working on C++ his Cfront compiler originally allowed <code>auto</code> to be used for variable declarations in a very similar way to that now in C++11: â€œ<em>The auto feature has the distinction to be the earliest to be suggested and implemented: I had it working in my Cfront implementation in early 1984, but was forced to take it out because of C compatibility problems</em>â€ [<a href="Orr.xml#[Stroustrup]">Stroustrup</a>].</p>

<p>Many years later there was a discussion on the C++ committee email reflector about the difficulty of declaring variables resulting from complex template expressions. David Abrahams wrote (in ext-4278, 26 Oct 2001): â€œ<em>...the expression results in a very complicated nested template type which is difficult for a user to write down</em>â€. </p>

<p>At the time the best suggestion was to write such variable declarations as something like:</p>

<pre class="programlisting">
  typeof(&lt;expression&gt;) x = &lt;expression&gt;;</pre>
  
<p>(<code>typeof</code> was an early name for what eventually became <code>decltype</code> in C++11). </p>

<p>This however meant that the (potentially rather complex) expression had to be written <em>twice</em>, for example in this simple case:</p>

<pre class="programlisting">
  typeof(alpha*(u-v)*transpose(w)) 
     x = alpha*(u-v)*transpose(w);</pre>
	 
<p>which made the code harder to read â€“ and was also a good source of bugs if and when the expression was changed.</p>

<p>He suggested this form of declaration could be replaced with something like:</p>

<pre class="programlisting">
  template &lt;class T&gt; T x = &lt;expression&gt;;</pre>
  
<p>The C++ template argument deduction rules could then come into play to work out the actual compile-time type of '<code>
x</code>'.</p>

<p>In the subsequent discussion Andy Koenig wrote: â€œ<em>I would also like to see something like </em></p>

<pre class="programlisting">
  auto x = &lt;expression&gt;;</pre>
  
<p><em>I know we canâ€™t use </em><code>auto</code><em>, but you get the idea.</em>â€</p>

<p>However, various people picked up on his, probably throwaway, suggestion and the idea gained momentum. Of course, a big concern was whether this change of use for the <code>auto</code> keyword would break a lot of code; the standards committee is understandably very reluctant to break existing valid code. A number of people spent some time searching internal company code bases they had access to and also using the now defunct Google Code Search. Daveed Vandevoorde reported that â€œ<em>Google Code Search finds less than 50 uses of </em><code>auto</code><em> in C++ code.</em>â€</p>

<p>It turned out that most existing uses of <code>auto</code> were in test code (verifying that compilers, parsers or other tools handling C++ code correctly processed the keyword) and that a number of the remaining uses were in fact incorrect! The research gave the committee confidence that repurposing the keyword would not be a major problem. This confidence seems to have been well-founded.</p>

<p>The first formal paper for C++0x was N1478 (Apr 2003) [<a href="Orr.xml#[N1478]">N1478</a>]. The emphasis of this paper was in providing ways to make <em>generic</em> programming easier â€“ the draft of this proposal (ext-5364) begins: â€œ<em>Proposal for â€œautoâ€ and â€œtypeofâ€ to simplify the writing of templates</em>â€.</p>

<p>The paper also proposed another new keyword, <code>fun</code>, which was used for declaring function return types. Over time this was replaced by an overloaded use for <code>auto</code> (and jokes about how we lost the fun.) I do sometimes wonder whether <code>auto</code> is in danger of gaining multiple meanings in the same way that the keyword <code>static</code> has!</p>

<p>It is worth keeping this history in mind when looking at the use of <code>auto</code> as it might help distinguish the two main uses (one for variables and one for functions). It is also instructive to compare the original target design space â€“ templates â€“ with the range of uses finally allowed. It isnâ€™t the first time that a feature in C++ has had its use broadened well beyond the original expectations.</p>

<h2>So what did we end up with?</h2>

<p><code>auto</code> is repurposed and can be used in a variety of ways, such as:</p>

<ul>
  <li>a placeholder for the type in a simple variable declaration:
<pre class="programlisting">
    auto x = 5; //'auto' here is equivalent to 'int'
</pre></li>

	<li>to declare a variable referring to a lambda:
<pre class="programlisting">
    auto lambda1 = [](int i){ return i * i; }; </pre></li>
	
	<li>in a <code>new</code> expression:
<pre class="programlisting">
    new auto(1.0); //'auto' equivalent to 'double'</pre></li>

	<li>in function declarations (and definitions) allowing the return type to be specified at the end:
<pre class="programlisting">
    auto f()-&gt;int(*)[4]; </pre></li>
	
	<li>in function template declarations:
<pre class="programlisting">
    template &lt;class T, class U&gt;
    auto add(T t, U u) -&gt; decltype(t + u);</pre>
	
<p>where this is considerably simpler than the equivalent <em>without</em> <code>auto</code>:</p>

<pre class="programlisting">
    template &lt;class T, class U&gt;
    decltype((*(T*)0) + (*(U*)0)) add(T t, U u);</pre></li>
</ul>	

<p>In each case <code>auto</code> is a place holder for a <em>specific</em> compile time type â€“ this type is â€˜baked inâ€™ by the compiler. This is worth highlighting, especially for those used to languages with dynamic types; there is no runtime overhead in using <code>auto</code>. Also note that the use of <code>auto</code> does not change the <em>meaning</em> of the code â€“ it means exactly the same as the equivalent code with the deduced type written in full.</p>

<p>Once formally adopted into the working paper, <code>auto</code> became available for use in several compilers. Scott Meyerâ€™s list [<a href="Orr.xml#[Meyers12a]">Meyers12a</a>] of C++11 support shows <code>auto</code> was available in:</p>

<ul>
	<li>gcc 4.4 (formal release Apr â€™09)</li>
	<li>MSVC 10 (formal release Apr â€™10)</li>
</ul>

<p>and the examples given above all do compile successfully with both gcc and MSVC.</p>

<p>As the wording for <code>auto</code> was being polished for inclusion in C++11 (and as additional papers were written adding further new features to the language) there was a keen interest in avoiding any â€˜special casesâ€™ for <code>auto</code>. The committee followed the general principle of trying to make use of <code>auto</code> orthogonal to other choices: so for example <code>auto</code> for function return types is not restricted to function templates but can also be used for non-template functions.</p>

<h2>Interactions with other items</h2>

<h3>r-value references</h3>

<p>One of the new items added to C++11 was r-value references (designated with &amp;&amp;). As many of you will already be well aware this was principally added to support â€˜move semanticsâ€™ which enables significant performance improvements when copying data out of temporary objects.</p>

<pre class="programlisting">
  auto var1 = &lt;expression&gt;;
  auto &amp; var2 = &lt;expression&gt;;
  auto &amp;&amp; var3 = &lt;expression&gt;;</pre>

<p>These are all valid (subject to constraints on the actual expression).</p>

<p>Note though the last in particular may not do <em>quite</em> what you expect â€¦ I will say more about  this in the second article. (Scott Meyers covered this in his article on â€˜Universal References in C++â€™ [<a href="Orr.xml#[Meyers12b]">Meyers12b</a>].)</p>


<h3>Lambda</h3>

<p>The addition of lambda expressions to C++ was one of the motivating cases for <code>auto</code>. Passing a lambda to a function template works easily â€“ for example:</p>

<pre class="programlisting">
  template &lt;typename T&gt; void invoke(T t);
  ...
  invoke([](int i){ return i; });</pre>

<p>The call to <code>invoke</code> passes a (trivial in this example) lambda that takes an <code>int</code> and returns it. The compiler deals with instantiation of the correct template and so the programmer neither knows nor cares what the actual type of the lambda is.</p>

<p>But what if you want to hold the lambda in a variable?</p>

<pre class="programlisting">
  &lt;type&gt; square = [](int i){ return i * i; };
  int j = square(7);</pre>

<p>The $64,000 question is: â€œWhat should replace <code>&lt;type&gt;</code> ?â€ The answer is <code>auto</code>.</p>

<h3>NSDMI (non-static data member initialisers)</h3>

<p>In C++11 values can be provided for non-static data members that will be used to provide the initial value (unless one is supplied in the initialisation list of the constructor). For example:</p>

<pre class="programlisting">
  class x {
    int i = 128;
    double d = 2.71828;
  };</pre>

<p>Could you instead write:</p>

<pre class="programlisting">
  class x {
    auto i = 128;
    auto d = 2.71828;
  };</pre>
  
<p>Short answer: no. This was rejected ... see â€˜Where <em>canâ€™t</em> you use it?â€™ below for a bit more detail about the reasons for this.</p>

<h3>Range-based for</h3>

<p>C++11 added syntactic sugar to support simple syntax for iteration over containers, for example:</p>

<pre class="programlisting">
  for (std::string x : container) {
    // do something with 'x'
  }</pre>

<p>which is a simpler and safer way to write:</p>

<pre class="programlisting">
 for (std::vector&lt;std::string&gt;::const_iterator it
    = container.begin(); it != container.end();
    ++it) {
   std::string x = *it;
   // do something with 'x'
 }</pre>

<p>The <code>auto</code> keyword is allowed in this context too, so you can write:</p>

<pre class="programlisting">
  for (auto x : container) {
    ...
  }</pre>

<p>and the compiler will deduce the correct type for <code>x</code> to match the elements in the container.</p>

<p>The use of references and <code>const</code> allows more control over whether the loop variable is a value or a reference and whether or not it is constant:</p>

<pre class="programlisting">
  for (auto &amp; x : container) {
    x += ...
  }</pre>

<p>Or</p>

<pre class="programlisting">
  for (auto const &amp; x : container) {
    ...
  }</pre>

<p>(Note that in the first example the type of <code>x</code> is already a <code>const</code> reference if the container is <code>const</code>.)</p>

<h3>Specification note</h3>

<p>You may or may not care that range-based for is actually specified in terms of <code>auto</code> (see Listing 1).</p>

<table class="sidebartable">
	<tr>
		<td>
			<pre class="programlisting">
{
  auto &amp;&amp; __range = range-init;
  for ( auto __begin = begin-expr,
             __end = end-expr;
        __begin != __end;
        ++__begin ) {
    for-range-declaration = *__begin;
    statement
  }
}
			</pre>
		</td>
	</tr>
	<tr>
		<td class="title">Listing 1</td>
	</tr>
</table>

<h3>The decltype keyword</h3>

<p>The keyword <code>decltype</code> obtains the type of an expression. In C++03 there was no easy way to do this and various tricks were invented to provide various derived types â€“ for example by using nested <code>typedef</code>s or associated traits classes. While <code>auto</code> allows you to declare a variable of the same type as an expression, <code>decltype</code> provides a more general technique. For example, declaring a variable without an initial value:</p>

<pre class="programlisting">
  std::vector&lt;int&gt; vec;
  decltype(vec.begin()) iter;</pre>

<p>There are some subtle differences declaring a variable with <code>decltype</code> and with <code>auto</code>, which I will touch on later.</p>

<h2>Where must you use it?</h2>

<p>The basic principle behind <code>auto</code> is that the compiler knows the type â€¦ but you either canâ€™t describe it or donâ€™t want to. There is one primary use-case where you cannot name the type â€“ with lambdas. Lambdas are most often used as arguments to other functions. However, if you want one as a local variable, the standard states (5.1.2p3) that the type of the lambda-expression â€œ<em>is a </em><strong>unique, unnamed</strong><em> nonunion class type â€“ called the closure type</em>â€ (my emphasis)</p>

<p>What this means is you the programmer <strong>cannot</strong> name the type (as the type is unnamed), nor can you even use <code>decltype</code> to declare a variable to hold the lamdba (as the type is unique so the type in the <code>decltype</code> <em>wonâ€™t</em> match the actual type of the expression).</p>

<p>Side note:</p>

<p>A small number of types in the standard are specified as <em>unspecified</em> so you cannot name them portably. <code>auto</code> gives you a way to create variables of those types; however this is almost never a genuine problem as the number of use cases when you genuinely need to do this is vanishingly small!</p>

<h3>What is the actual type of a lambda variable?</h3>

<p>Listing 2 is a simple example of a variable holding a lambda.</p>

<table class="sidebartable">
	<tr>
		<td>
			<pre class="programlisting">
int main()
{
  auto sum = [] (int x, int y)
  { return x + y; }; 

  int i(1);
  int j(2);
  // ...
  std::cout &lt;&lt; i &lt;&lt; &quot;+&quot; &lt;&lt; j &lt;&lt; &quot;=&quot; 
    &lt;&lt; sum(i, j) &lt;&lt; std::endl;
}
			</pre>
		</td>
	</tr>
	<tr>
		<td class="title">Listing 2</td>
	</tr>
</table>

<p>In this contrived example the lambda is created and assigned to <code>sum</code> at the start of <code>main</code> and then invoked at the end of <code>main</code> in the output operation. But, if we are curious, we may be wondering what actually <em>is</em> the type of the variable holding the lambda.</p>

<p>We cannot <em>name</em> it in our code, but we are allowed to perform some other operations on the type.</p>

<p>We may for instance try to get some information by using <code>typeinfo</code>, for example with: <code>typeid(sum).name()</code></p>

<p>The actual output is implementation specified, I obtain this with MSVC:</p>

<pre class="programlisting">
  class &lt;lambda_8f4bf0680d354484748e55d11883b00a&gt;</pre>

<p>and this with gcc:</p>

<pre class="programlisting">
  Z4mainEUliiE_</pre>
  
<p>(this name demangles to <code>main::{lambda(int, int)#1}</code>)</p>

<p>This gives some hint about possible implementation strategies in each case, but obviously code like this is of very limited practical utility.</p>

<h3>An alternative solution</h3>

<p>Very commonly of course we are not interested in the <em>precise</em> type of the variable but more in what we can <em>do</em> with it.  We could then make use of the C++ <code>function</code> class to hold the variable:</p>

<pre class="programlisting">
  std::function&lt;int(int, int)&gt; sum = [](int i,
                                              int j) ...</pre>

<p>This technique employs <em>type erasure </em>behind the scenes â€“ the actual lambda type is hidden inside the <code>std::function</code> object at the cost of a small runtime penalty. (<code>auto</code> avoids this penalty.)</p>

<p>This looks very similar to the following C# code:</p>

<pre class="programlisting">
  Func&lt;int, int, int&gt; sum = (int x, int y) =&gt; {...}</pre>

<h2>Are lambdas the only place to use auto?</h2>

<p>Declaring variables to hold lambda expressions is, I believe, the only time <code>auto</code> is mandatory in your code. However most people recommend you use <code>auto</code> in (at least some of) the cases where giving the name of type yourself is a valid option.</p>

<p>Herb Sutter, for example, wrote: â€œ<em>For example, virtually every five-line modern C++ code example will say â€œautoâ€ somewhere.</em>â€ [<a href="Orr.xml#[Sutter]">Sutter</a>]</p>

<p>As the quotation from G.K.Chesterton implies, being <em>allowed</em> to use <code>auto</code> does not mean this is always the right thing to do. I will look in the subsequent article about some of the forces involved in deciding when to use (and when not to use) the <code>auto</code> keyword.</p>

<h2>Where canâ€™t you use it?</h2>

<p>In C++11 you cannot use <code>auto</code>:</p>

<ul>

	<li>As the type of lambda <strong>arguments</strong>:
	
<pre class="programlisting">
    auto sum = [] (auto x, auto y) 
    // not (currently) legal
      { /*...*/
 }</pre>

	<p>This however was voted into the next release â€“ C++14 â€“ at this Aprilâ€™s WG21 meeting; and is already in some recent versions of gcc.</p>
	
	<p>What this generates is a lambda which can take different argument types â€“ a sort of â€˜lambda templateâ€™. This has been named â€˜polymorphic lambdaâ€™ and you may well have heard some of the discussion about this feature, which is one of the most common requests people make for extensions to lambda.</p>
	</li>
	
	<li>To declare function return types without a trailing-return-type declaration
<pre class="programlisting">
    auto func() { return 42; }
    // not (currently) legal</pre>
	
	<p>This also was voted into C++14 â€“ compilers will be able to deduce the return type of <code>func()</code> from the type of the returned expression (or expressions, if they are of equivalent type).</p>
	</li>
	
	<li>To declare member data
	
<pre class="programlisting">
    class X {
      auto field = 42; // error
      // ...
    }; </pre>
	
	<p>As mentioned earlier, this idea was floated during the discussions about <code>auto</code> for C++11, but there were concerns over whether this change might make the parsing of class definitions too complex and also over violations of the ODR (one definition rule) if the type of the initialisation expression was <em>different</em> in two different translation units.</p>

	<p>Discussion on supporting this one has resurfaced recently and it is possible there will be a proposal to add it to the language.</p>

	<p>I note that C#, where the <code>var</code> keyword has much the same purpose as <code>auto</code> for C++, also disallows fields being declared with <code>var</code>. Perhaps this common choice indicates some deeper problems with what at first sight seems to be a relatively straightforward extension.</p>
	</li>

	<li>To declare function arguments
	
<pre class="programlisting">
    void foo(auto i) { /*...*/ } // error
</pre>

	<p>The idea here is that this declares a function <code>foo</code> that behaves like a template and instantiates itself according to the type of argument provided â€“ the code above would be effectively equivalent to:</p>

<pre class="programlisting">
    template &lt;typename __T1&gt;
    void foo(__T1 i) { /* ... */
 }</pre>
 
	<p>However, we <em>already</em> have function templates to do this job, and the use of explicitly named template arguments rather than <code>auto</code> allows you to express constraints between the arguments types more easily. However, there is some interest in supporting this syntax and so it may possibly be standardised at some time in the future, but is not currently in scope. It may be introduced as part of the â€˜concepts liteâ€™ development that is being formalised as a Technical Specification since this may provide the vocabulary to express constraints between the arguments.</p>

	</li>

</ul>


<h2>Conclusion</h2>

<p>C++11 contains a number of new features, some of which are somewhat complicated or obscure. The <code>auto</code> keyword though seems to be relatively safe and easy to use and allows complicated variable declarations to be greatly simplified. When used in conjunction with the range-based for loop the resultant code, to my mind at least, expresses intent much more clearly than the equivalent C++03 code and with very few downsides.</p>

<p>However, the use of <code>auto</code> is not always so cut and dried â€“ and there are also some subtle interactions with <code>const</code> and r-value references. In the next article I will explore in more detail when you might wish to use <code>auto</code> and when you might prefer not to use it (and why). I will also cover some of the cases where <code>auto</code> produces different behaviour from what you might expect.</p>


<h2>Acknowledgements</h2>

<p>This article is based on the presentation with the same title at ACCU 2013.</p>

<p>Many thanks to Christof Meerwald, Irfan Butt, Sam Saariste and the <em>Overload</em> reviewers for their suggestions and corrections, which have helped to improve this article.</p>

<h2>References</h2>

<p class="bibliomixed"><a id="[Meyers12a]"></a>[Meyers12a]  <a href="http://www.aristeia.com/C++11/C++11FeatureAvailability.htm">http://www.aristeia.com/C++11/C++11FeatureAvailability.htm</a></p>


<p class="bibliomixed"><a id="[Meyers12b]"></a>[Meyers12b]  â€˜Universal References in C++â€™, Scott Meyers (<em>Overload</em> 111)</p>

<p class="bibliomixed"><a id="[N1478]"></a>[N1478]  <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1478.pdf">http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1478.pdf</a></p>

<p class="bibliomixed"><a id="[Stroustrup]"></a>[Stroustrup]  <a href="http://www.stroustrup.com/C++11FAQ.html#auto">http://www.stroustrup.com/C++11FAQ.html#auto</a></p>

<p class="bibliomixed"><a id="[Sutter]"></a>[Sutter]  <a href="http://herbsutter.com/elements-of-modern-c-style/">http://herbsutter.com/elements-of-modern-c-style/</a></p>
</p>
<p><strong>Notes:</strong>&nbsp;</p>
<p><em>More fields may be available via dynamicdata ..</em></p>
</div>
</channel>
</rss>
