<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Hacking C++</title>
	<atom:link href="http://hackingcxx.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://hackingcxx.wordpress.com</link>
	<description>Metaprogramming for the real world.</description>
	<lastBuildDate>Sun, 28 Jun 2009 17:22:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='hackingcxx.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://0.gravatar.com/blavatar/a3b5cf763ab9e66e7acc51ff4c9f22a1?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Hacking C++</title>
		<link>http://hackingcxx.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://hackingcxx.wordpress.com/osd.xml" title="Hacking C++" />
	<atom:link rel='hub' href='http://hackingcxx.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Selectively disabling implicit conversions</title>
		<link>http://hackingcxx.wordpress.com/2009/06/27/disabling-implicit-conversion-of-function-arguments/</link>
		<comments>http://hackingcxx.wordpress.com/2009/06/27/disabling-implicit-conversion-of-function-arguments/#comments</comments>
		<pubDate>Sat, 27 Jun 2009 19:42:55 +0000</pubDate>
		<dc:creator>Jeff Schwab</dc:creator>
				<category><![CDATA[C++]]></category>

		<guid isPermaLink="false">http://hackingcxx.wordpress.com/?p=6</guid>
		<description><![CDATA[Disabling implicit conversion of function arguments can catch simple mistakes in client code at compile-time.  When an unacceptable argument type is passed, a compile-time error should result, not a run-time bug.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hackingcxx.wordpress.com&amp;blog=8347747&amp;post=6&amp;subd=hackingcxx&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h3>A Problem</h3>
<p>The need often arises in C++ to work around weaknesses inherited from C.  One particularly onerous issue is the implicit, narrowing conversion of primitive types.  Narrowing conversions are easily made by accident, without any warning from the compiler.  For example, the following is entirely legal C++:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#8080ff"><b>int</b></font>&nbsp;<font color="#8080ff"><b>const</b></font>&nbsp;pi = <font color="#ff40ff"><b>3.14159</b></font>;</p>
<p>The author obviously meant to use some type other than int.  Usually, problems resulting from implicit conversions are more subtle.  Consider the case of function argument conversion:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#8080ff"><b>int</b></font>&nbsp;square(<font color="#8080ff"><b>int</b></font>&nbsp;i) {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060">return</font>&nbsp;i * i;<br /> &nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#8080ff"><b>double</b></font>&nbsp;<font color="#8080ff"><b>const</b></font>&nbsp;radius = <font color="#ff40ff"><b>2.6</b></font>;<br /> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#8080ff"><b>double</b></font>&nbsp;<font color="#8080ff"><b>const</b></font>&nbsp;area = <font color="#ff40ff"><b>3.14159</b></font>&nbsp;* square(radius); <font color="#ff6060"><b>// Whoops.</b></font></p>
<p>Unless square has been appropriately overloaded, radius will be implicitly converted from 2.6 to 2.  The integer result will be widened to double, and area will be initialized to 12.56636, rather than 21.2371484.  This kind of bug does not always jump out at a tired programmer staring blearily at a debugger.  The worst part is that the conversion has already been performed before square even begins executing, so there is no way for the author of square to detect, much less prevent, such accidents.  Or is there?</p>
<h3>A Solution</h3>
<p>Suppose we have written square(int) as part of a library of fixed-point math functions.  We want to accept ints, but do not want those ints to be constructed implicitly from any other type.  What we need is a hook into the overload resolution process itself, to prevent square(int) being selected in the first place.</p>
<p>One approach is to declare, but not define, a catch-all function template:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#8080ff"><b>template</b></font>&lt;<font color="#8080ff"><b>typename</b></font>&nbsp;T&gt; T square(T);</p>
<p>Whenever square is passed an argument of any type other than int, the template will be resolved in preference to square(int).  Since the template is never defined, a link error will ensue, saving our clients from the dreaded implicit conversion.  Voil&aacute;!</p>
<p>This approach has two major drawbacks:</p>
<ol>
<li>A separate template is needed for every function in the library.
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#8080ff"><b>int</b></font>&nbsp;square(<font color="#8080ff"><b>int</b></font>&nbsp;i) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060">return</font>&nbsp;i * i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#8080ff"><b>int</b></font>&nbsp;cube(<font color="#8080ff"><b>int</b></font>&nbsp;i) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060">return</font>&nbsp;i * square(i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8230;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#8080ff"><b>template</b></font>&lt;<font color="#8080ff"><b>typename</b></font>&nbsp;T&gt; T square(T);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#8080ff"><b>template</b></font>&lt;<font color="#8080ff"><b>typename</b></font>&nbsp;T&gt; T cube(T);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8230;</li>
<li>Although reported errors at link-time are a major improvement over silent errors at run-time, the issue really has nothing to do with linking.  We ought to be able to catch it at compile-time.</li>
</ol>
<p>The first problem will make maintenance difficult for us, the library developers, while the second will make life difficult for our clients.  Let&#8217;s tackle the problems in order.</p>
<h3>DRYness Through AOP</h3>
<p>The error-catching template declarations have a great deal of commonality.  Such near-duplicate fragments are sometimes called &#8220;code clones,&#8221; and are widely recognized as maintenance nightmares.  In Agile development, the principle that one should avoid code clones is called DRY: Don&#8217;t Repeat Yourself.</p>
<p>In the case at hand, we can DRY our code by taking an aspect-oriented approach.  We really want to tackle a cross-cutting concern of our library, namely function argument passing, rather than a bunch of manually selected functions.  As with most problems in software development, what we need is a new abstraction; and, as is often the case in C++, the abstraction is best implemented by a new static type:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#8080ff"><b>struct</b></font>&nbsp;only_int<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#8080ff"><b>int</b></font>&nbsp;value;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060"><b>/*</b></font><font color="#ff6060"><b>&nbsp;Declared, but never defined. </b></font><font color="#ff6060"><b>*/</b></font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#8080ff"><b>template</b></font>&lt;<font color="#8080ff"><b>typename</b></font>&nbsp;T&gt; only_int( T );</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;only_int( <font color="#8080ff"><b>int</b></font>&nbsp;i )<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: value( i ) { }<br />
&nbsp;&nbsp;&nbsp;&nbsp;};</p>
<p>Instances of this class are constructible from int, but not from any other primitive or client-defined type.  Our library functions can use it directly, with no need for per-function template declarations:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#8080ff"><b>int</b></font>&nbsp;square(only_int i) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060">return</font>&nbsp;i.value * i.value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#8080ff"><b>int</b></font>&nbsp;cube(only_int i) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060">return</font>&nbsp;i.value * square(i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&#8230;</p>
<p>So much for the code clones.</p>
<h3>Better Diagnostics Through Early Binding</h3>
<p>Next, we would like to move the error reporting from link time to compile time.  Fortunately, C++ includes a powerful mechanism for controlling access to class members.  To deny client access to the catch-all constructor template, we define our class using the class keyword (rather than struct), thereby making the default access level private.  We explicitly mark the rest of the class public.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#8080ff"><b>class</b></font>&nbsp;only_int<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#8080ff"><b>template</b></font>&lt;<font color="#8080ff"><b>typename</b></font>&nbsp;T&gt; only_int( T );</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060">public</font>:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#8080ff"><b>int</b></font>&nbsp;value;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;only_int( <font color="#8080ff"><b>int</b></font>&nbsp;i )<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: value( i ) { }<br />
&nbsp;&nbsp;&nbsp;&nbsp;};</p>
<p>Our library now generates the compile-time error we originally sought.  Modern compilers will print, as part of the diagnostic message, the exact location of the error in client code.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;$&nbsp;cat&nbsp;client.cc<br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060">using</font>&nbsp;integer_math::square;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#8080ff"><b>double</b></font>&nbsp;<font color="#8080ff"><b>const</b></font>&nbsp;radius&nbsp;=&nbsp;<font color="#ff40ff"><b>2.6</b></font>;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#8080ff"><b>double</b></font>&nbsp;<font color="#8080ff"><b>const</b></font>&nbsp;area&nbsp;=&nbsp;<font color="#ff40ff"><b>3.14159</b></font>&nbsp;*&nbsp;square(radius);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;$&nbsp;g++&nbsp;-include&nbsp;integer_math.hh&nbsp;-c&nbsp;client.cc<br />
&nbsp;&nbsp;&nbsp;&nbsp;./integer_math.hh:6:&nbsp;error:&nbsp;&lsquo;template&lt;class&nbsp;T&gt;&nbsp;integer_math::only_int::only_int(T)&rsquo;&nbsp;is&nbsp;private<br />
&nbsp;&nbsp;&nbsp;&nbsp;client.cc:4:&nbsp;error:&nbsp;within&nbsp;this&nbsp;context</p>
<h3>Generalizing</h3>
<p>The benefits of class-based abstraction have already come into play:  The addition of access control to our class automatically applies to all of our integer math functions, without requiring any syntactic changes in them.  There are still, however, plenty of potential modifications to only_int that could require corresponding changes in our library function definitions.  Such scattered changes constitute a royal pain in the neck.  It will be wise to generalize our class as much as possible now, rather than leave ourselves open to downstream headaches.</p>
<div style="background:#eff;padding:1em;">You may have heard the Extreme Programming truism YAGNI: You Aren&#8217;t Gonna Need It.  YAGNI advises us not to add any functionality to our code before it is actually needed.  This idea may hold some truth, especially for languages with extremely uniform syntax, e.g. Lisp and Smalltalk.  In C++, though, it is important to write code in a way that lends itself to later extension and enhancement.  Some aspects of C++ syntax are entirely flexible, but others are rigid enough to cause severe problems if used in public interfaces.  It would be irresponsible of a C++ library author to stop coding the instant a library met the exact needs of the moment.  In C++, the earlier we generalize, the better.</div>
<p>One obvious generalization is to support wrapping of any given type, rather than hard-coding int.  Implicit conversions are not unique to int; if our math library one day needs to accept other types, we would like to enable them selectively.  The solution here is to generate our only_int type from a generic class template:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#8080ff"><b>template</b></font>&lt;<font color="#8080ff"><b>typename</b></font>&nbsp;T&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#8080ff"><b>class</b></font>&nbsp;only<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#8080ff"><b>template</b></font>&lt;<font color="#8080ff"><b>typename</b></font>&nbsp;U&gt; only( U );</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060">public</font>:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T value;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;only( T t )<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: value( t ) { }<br />
&nbsp;&nbsp;&nbsp;&nbsp;};</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#8080ff"><b>typedef</b></font>&nbsp;only&lt;<font color="#8080ff"><b>int</b></font>&gt; only_int;</p>
<p>Whenever we define such generic templates, it is a good idea to provide publicly accessible type names that support compile-time introspection, and to use only these names in public member declarations:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#8080ff"><b>template</b></font>&lt;<font color="#8080ff"><b>typename</b></font>&nbsp;T&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#8080ff"><b>class</b></font>&nbsp;only<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#8080ff"><b>template</b></font>&lt;<font color="#8080ff"><b>typename</b></font>&nbsp;U&gt; only( U );</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060">public</font>:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#8080ff"><b>typedef</b></font>&nbsp;T value_type;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value_type value;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;only( value_type v )<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: value( v ) { }<br />
&nbsp;&nbsp;&nbsp;&nbsp;};</p>
<div style="background:#eff;padding:1em;">The name value_type was established by the STL, and has been carried forward by libraries like Boost.MPL.  The STL and MPL have also established other de facto standard names and conventions.  Conforming to these conventions helps us avoid a tremendous amount of boilerplate.</div>
<p>The next potential pitfall comes from the public member variable only&lt;T&gt;::value.  Technically, the problem is not that only&lt;T&gt;::value is a public variable, but that the syntax for accessing variables in C++ is different from the syntax for calling functions, overloaded conversion operators notwithstanding.  If we ever want some code to be run automatically when a value is accessed, we require that all accesses use function-call syntax.  We might as well bite that bullet now, by making only&lt;T&gt;::value private, and providing an accessor function.  This does require us to touch all of our library function definitions, one last time.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#8080ff"><b>template</b></font>&lt;<font color="#8080ff"><b>typename</b></font>&nbsp;T&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#8080ff"><b>class</b></font>&nbsp;only<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T m_value;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#8080ff"><b>template</b></font>&lt;<font color="#8080ff"><b>typename</b></font>&nbsp;U&gt; only( U );</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060">public</font>:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#8080ff"><b>typedef</b></font>&nbsp;T value_type;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;only( value_type v )<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: m_value( v ) { }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value_type get() <font color="#8080ff"><b>const</b></font>&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060">return</font>&nbsp;m_value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;};</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#8080ff"><b>int</b></font>&nbsp;square(only_int i) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060">return</font>&nbsp;i.get() * i.get();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#8080ff"><b>int</b></font>&nbsp;cube(only_int i) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060">return</font>&nbsp;i.get() * square(i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&#8230;</p>
<p>Further generalization is yet to be had, but it will have to wait for a future article.  Stay tuned for optional pass-by-reference, the Open/Closed Principle, and policy-based design.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hackingcxx.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hackingcxx.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hackingcxx.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hackingcxx.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hackingcxx.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hackingcxx.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hackingcxx.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hackingcxx.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hackingcxx.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hackingcxx.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hackingcxx.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hackingcxx.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hackingcxx.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hackingcxx.wordpress.com/6/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hackingcxx.wordpress.com&amp;blog=8347747&amp;post=6&amp;subd=hackingcxx&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hackingcxx.wordpress.com/2009/06/27/disabling-implicit-conversion-of-function-arguments/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/149379873fe2cb70e550c6bff8fedd0c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Jeff Schwab</media:title>
		</media:content>
	</item>
	</channel>
</rss>
