<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Pointer to a constant member variable</title>
		<link>http://www.allegro.cc/forums/view/605916</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Wed, 05 Jan 2011 08:12:19 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hello all,</p><p>I&#39;ve just been plugging away at my binding library and I found the compiler finds ambiguity in the two following declarations:</p><div class="source-code snippet"><div class="inner"><pre><span class="c">// Support for binding a constant member variable </span>
<span class="c">// (makes a read-only variable on the JS side)</span>
<span class="k1">template</span><span class="k3">&lt;</span><span class="k1">typename</span> T, <span class="k1">typename</span> C&gt;
JSObject<span class="k3">&amp;</span> AddVar<span class="k2">(</span><span class="k1">const</span> std::string<span class="k3">&amp;</span> name, <span class="k1">const</span> T C::<span class="k3">*</span> var<span class="k2">)</span><span class="k2">;</span>

<span class="c">// Binding of a getter which is non-const for some reason</span>
<span class="c">// Makes a read-only variable on the JS side</span>
<span class="k1">template</span><span class="k3">&lt;</span><span class="k1">typename</span> T, <span class="k1">typename</span> C&gt;
JSObject<span class="k3">&amp;</span> AddVar<span class="k2">(</span><span class="k1">const</span> std::string<span class="k3">&amp;</span> name, T <span class="k2">(</span>C::<span class="k3">*</span>Get<span class="k2">)</span><span class="k2">(</span><span class="k1">void</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

My first assumption is I don&#39;t actually know the syntax for a pointer to a constant member variable. The compiler has no problem differentiating between the two following:</p><div class="source-code snippet"><div class="inner"><pre><span class="c">// Binding of a getter which is non-const for some reason</span>
<span class="c">// Makes a read-only variable on the JS side</span>
<span class="k1">template</span><span class="k3">&lt;</span><span class="k1">typename</span> T, <span class="k1">typename</span> C&gt;
JSObject<span class="k3">&amp;</span> AddVar<span class="k2">(</span><span class="k1">const</span> std::string<span class="k3">&amp;</span> name, T <span class="k2">(</span>C::<span class="k3">*</span>Get<span class="k2">)</span><span class="k2">(</span><span class="k1">void</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>

<span class="c">// Binding of a getter</span>
<span class="c">// Makes a read-only variable on the JS side</span>
<span class="k1">template</span><span class="k3">&lt;</span><span class="k1">typename</span> T, <span class="k1">typename</span> C&gt;
JSObject<span class="k3">&amp;</span> AddVar<span class="k2">(</span><span class="k1">const</span> std::string<span class="k3">&amp;</span> name, T <span class="k2">(</span>C::<span class="k3">*</span>Get<span class="k2">)</span><span class="k2">(</span><span class="k1">void</span><span class="k2">)</span> <span class="k1">const</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

Which makes perfect sense considering the standard specified pointers to constant member functions and pointers to non-const member functions may not be the same. Having not read the standard, I took this and assumed the same would be true of const and non-const pointers to member variables, allowing me to templatize the two separately so I could simply not generate setters for the const member variable pointers. I suppose this also may have been an invalid assumption, but I cannot find my information on the subject.</p><p>What am I doing or assuming wrong?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (relpatseht)</author>
		<pubDate>Tue, 28 Dec 2010 04:22:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Giving a name to things doesn&#39;t change their type. These two are ambiguous</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> foo<span class="k2">(</span><span class="k1">int</span> x<span class="k2">)</span><span class="k2">;</span>
<span class="k1">void</span> foo<span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
Adding const does make the type different from the non-const version.
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> foo<span class="k2">(</span><span class="k1">const</span> <span class="k1">int</span> x<span class="k2">)</span><span class="k2">;</span>
<span class="k1">void</span> foo<span class="k2">(</span><span class="k1">int</span> x<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

Is that all the information you wanted or did I misinterpret your question?</p><p>&lt;edit&gt;<br />Sorry I just noticed your first function has &#39;const&#39; where the second doesn&#39;t. So.. I guess you&#39;re right about needing to put the const at the end.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kazzmir)</author>
		<pubDate>Tue, 28 Dec 2010 04:46:33 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yes, I know, but I&#39;m talking about pointers to member variables. I&#39;m about positive const T C::* var doesn&#39;t make a pointer to a constant member variable, but I&#39;m not sure what the syntax to do so is.</p><p>I know a pointer to a member function and a pointer to a constant member function are different types, so I&#39;m assuming the same is true of member variables, but it may not. If you could shed some light on the situation, I&#39;d be appreciative.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (relpatseht)</author>
		<pubDate>Tue, 28 Dec 2010 05:24:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I don&#39;t think theres a way to declare a function that takes variables from a specific class. Above your functions accept parameters whose type is a function that returns T and is a member of C. You can&#39;t specify variables in the class C.</p><p>When const is applied to parameter values it only disambiguates in the case when you pass by reference.</p><p>Can you maybe show the code that uses the AddVar functions?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kazzmir)</author>
		<pubDate>Tue, 28 Dec 2010 05:56:55 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The &#39;Pointer to member variable&#39; concetp doesn&#39;t exist. You just use a plain normal pointer to point to a member variable.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Oscar Giner)</author>
		<pubDate>Tue, 28 Dec 2010 06:19:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>No, pointers to member variables definitely exist. They are very similar to pointers to member functions. They are rarely used (which I can understand, pointers to member functions are rarely used, and classes rarely expose member variables), but they are real and completely necessary for what I am doing.</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">class</span> Foo
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>    public:
<span class="number">  4</span>        <span class="k1">int</span> v<span class="k2">;</span>
<span class="number">  5</span>        Foo<span class="k2">(</span><span class="k2">)</span> <span class="k2">:</span> v<span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">{</span><span class="k2">}</span>
<span class="number">  6</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  7</span>
<span class="number">  8</span><span class="k1">typedef</span> <span class="k1">int</span> <span class="k2">(</span>Foo::<span class="k3">*</span>IntMemberPointer<span class="k2">)</span><span class="k2">;</span>
<span class="number">  9</span>
<span class="number"> 10</span><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 11</span><span class="k2">{</span>
<span class="number"> 12</span>    Foo bar, fish<span class="k2">;</span>
<span class="number"> 13</span>    IntMemberPointer q <span class="k3">=</span> <span class="k3">&amp;</span>Foo::v<span class="k2">;</span>
<span class="number"> 14</span>
<span class="number"> 15</span>    bar.<span class="k3">*</span>q <span class="k3">=</span> <span class="n">6</span><span class="k2">;</span> <span class="c">// bar.v = 6, fish.v = 0</span>
<span class="number"> 16</span>    fish.<span class="k3">*</span>q <span class="k3">=</span> <span class="n">42</span><span class="k2">;</span> <span class="c">// bar.v = 6, fish.v = 42</span>
<span class="number"> 17</span>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 18</span><span class="k2">}</span>
</div></div><p>

Anyway, the standard specifies that a pointer to a non-const member function is not the same type as a pointer to a const member function, ie, the following two types are distinct.
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">typedef</span> <span class="k1">void</span> <span class="k2">(</span>Foo::<span class="k3">*</span>Bar<span class="k2">)</span><span class="k2">(</span><span class="k1">void</span><span class="k2">)</span><span class="k2">;</span>
<span class="k1">typedef</span> <span class="k1">void</span> <span class="k2">(</span>Foo::<span class="k3">*</span>CBar<span class="k2">)</span><span class="k2">(</span><span class="k1">void</span><span class="k2">)</span> <span class="k1">const</span><span class="k2">;</span>
</pre></div></div><p>

Based on this, I am assuming the same is true of non-const member variables and const member variables, however, I don&#39;t know the syntax for a pointer to a const member variable, if it is indeed distinct from a pointer to a non-const member variable.
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">typedef</span> <span class="k1">int</span> <span class="k2">(</span>Foo::<span class="k3">*</span>var<span class="k2">)</span><span class="k2">;</span>
<span class="k1">typedef</span> <span class="k1">int</span> <span class="k2">(</span>Foo::<span class="k3">*</span>cvar<span class="k2">)</span> <span class="k1">const</span><span class="k2">;</span> <span class="c">// Not proper syntax</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (relpatseht)</author>
		<pubDate>Tue, 28 Dec 2010 07:03:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="source-code snippet"><div class="inner"><pre> IntMemberPointer q <span class="k3">=</span> <span class="k3">&amp;</span>Foo::v<span class="k2">;</span>
</pre></div></div><p>
You can&#39;t get the address of something that doesn&#39;t exist. Because Foo::v doesn&#39;t exist in memory. I think you&#39;re confusing this feature with other language that may have this feature, but C++ doesn&#39;t.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Oscar Giner)</author>
		<pubDate>Tue, 28 Dec 2010 08:06:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Apparently its a real c++ feature. Well I learned something new today.</p><p>Anyway, relpatseht you might want to ask on stackoverflow.com I guess.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kazzmir)</author>
		<pubDate>Tue, 28 Dec 2010 08:33:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I don&#39;t see anything wrong with the code. What compiler are you using and is it saying the overloads are ambiguous as such or only for a particular instantiation? Perhaps you could show all overloads?</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/605916/896415#target">kazzmir</a> said:</div><div class="quote"><p>
Adding const does make the type different from the non-const version.
</p></div></div><p>

With pointers it matters what the const applies to. A signature with a &quot;pointer to const object&quot; is an overload of a function that takes just a pointer.</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> foo<span class="k2">(</span><span class="k1">int</span><span class="k3">*</span><span class="k2">)</span><span class="k2">;</span>
<span class="k1">void</span> foo<span class="k2">(</span><span class="k1">int</span><span class="k3">*</span> <span class="k1">const</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//same as previous</span>
<span class="k1">void</span> foo<span class="k2">(</span><span class="k1">const</span> <span class="k1">int</span><span class="k3">*</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//overload</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (anonymous)</author>
		<pubDate>Wed, 29 Dec 2010 06:44:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>&lt;cut irrelevant stuff&gt;</p><p>Doing this solves it, but I have no idea why.
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="p">#include &lt;iostream&gt;</span>
<span class="number">  2</span><span class="k1">using</span> <span class="k1">namespace</span> std<span class="k2">;</span>
<span class="number">  3</span>
<span class="number">  4</span><span class="k1">class</span> Foo <span class="k2">{</span>
<span class="number">  5</span>public:
<span class="number">  6</span>    Foo<span class="k2">(</span><span class="k1">int</span> k<span class="k2">)</span> <span class="k2">:</span> k<span class="k2">(</span>k<span class="k2">)</span> <span class="k2">{</span><span class="k2">}</span>
<span class="number">  7</span>    
<span class="number">  8</span>    <span class="k1">const</span> <span class="k1">int</span> k<span class="k2">;</span>
<span class="number">  9</span>    <span class="k1">int</span> getk<span class="k2">(</span><span class="k2">)</span> <span class="k1">const</span> <span class="k2">{</span> <span class="k1">return</span> k<span class="k2">;</span> <span class="k2">}</span>
<span class="number"> 10</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 11</span>
<span class="number"> 12</span><span class="k1">template</span><span class="k3">&lt;</span><span class="k1">typename</span> T, <span class="k1">typename</span> C&gt;
<span class="number"> 13</span><span class="k1">void</span> output<span class="k2">(</span><span class="k1">const</span> T <span class="k3">&amp;</span>t, C <span class="k2">(</span>T::<span class="k3">*</span>getter<span class="k2">)</span><span class="k2">(</span><span class="k2">)</span> <span class="k1">const</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 14</span>    
<span class="number"> 15</span>    cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="k2">(</span>t.<span class="k3">*</span>getter<span class="k2">)</span><span class="k2">(</span><span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> endl<span class="k2">;</span>
<span class="number"> 16</span><span class="k2">}</span>
<span class="number"> 17</span>
<span class="number"> 18</span><span class="k1">template</span><span class="k3">&lt;</span><span class="k1">typename</span> T, <span class="k1">typename</span> C&gt;
<span class="number"> 19</span><span class="k1">void</span> output<span class="k2">(</span>T <span class="k3">&amp;</span>t, <span class="k1">const</span> C T::<span class="k3">*</span> var<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 20</span>    
<span class="number"> 21</span>    cout <span class="k3">&lt;</span><span class="k3">&lt;</span> t.<span class="k3">*</span>var <span class="k3">&lt;</span><span class="k3">&lt;</span> endl<span class="k2">;</span>
<span class="number"> 22</span><span class="k2">}</span>
<span class="number"> 23</span>
<span class="number"> 24</span><span class="k1">void</span> main<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 25</span>    
<span class="number"> 26</span>    Foo f<span class="k2">(</span><span class="n">5</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 27</span>    
<span class="number"> 28</span>    output<span class="k2">(</span>f, <span class="k3">&amp;</span>Foo::k<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 29</span>    output<span class="k2">(</span>f, <span class="k3">&amp;</span>Foo::getk<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 30</span><span class="k2">}</span>
</div></div><p>
<i>Not</i> implementing <span class="source-code"><span class="k1">void</span> output<span class="k2">(</span>T <span class="k3">&amp;</span>t, C T::<span class="k3">*</span> var<span class="k2">)</span></span> removes the ambiguity.</p><p>Said explicitly, don&#39;t make a member variable pointer an overload unless it has  a const.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ImLeftFooted)</author>
		<pubDate>Wed, 29 Dec 2010 12:17:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>In this case, part of the problem seems to be with the type of the first argument. If you pass a rvalue, then <b>T&amp;</b> is a better match than a <b>const T&amp;</b> whereas in the second argument <b>C</b> can be equally well deduced as <b>int</b> or <b>int() const</b>.</p><p>You might need to disable unsuitable overloads with enable_if/disable_if (also to be available in C++0x standard library).</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="p">#include &lt;iostream&gt;</span>
<span class="number">  2</span><span class="p">#include &lt;boost/type_traits.hpp&gt;</span>
<span class="number">  3</span><span class="p">#include &lt;boost/utility/enable_if.hpp&gt;</span>
<span class="number">  4</span><span class="k1">using</span> <span class="k1">namespace</span> std<span class="k2">;</span>
<span class="number">  5</span>
<span class="number">  6</span><span class="k1">class</span> Foo <span class="k2">{</span>
<span class="number">  7</span>public:
<span class="number">  8</span>    Foo<span class="k2">(</span><span class="k1">int</span> k<span class="k2">)</span> <span class="k2">:</span> k<span class="k2">(</span>k<span class="k2">)</span> <span class="k2">{</span><span class="k2">}</span>
<span class="number">  9</span>
<span class="number"> 10</span>    <span class="k1">int</span> k<span class="k2">;</span>
<span class="number"> 11</span>    <span class="k1">int</span> getk<span class="k2">(</span><span class="k2">)</span> <span class="k1">const</span> <span class="k2">{</span> <span class="k1">return</span> k<span class="k2">;</span> <span class="k2">}</span>
<span class="number"> 12</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 13</span>
<span class="number"> 14</span><span class="k1">template</span><span class="k3">&lt;</span><span class="k1">typename</span> T, <span class="k1">typename</span> C&gt;
<span class="number"> 15</span><span class="k1">void</span> output<span class="k2">(</span><span class="k1">const</span> T <span class="k3">&amp;</span>t, C <span class="k2">(</span>T::<span class="k3">*</span>getter<span class="k2">)</span><span class="k2">(</span><span class="k2">)</span> <span class="k1">const</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 16</span>
<span class="number"> 17</span>    cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="k2">(</span>t.<span class="k3">*</span>getter<span class="k2">)</span><span class="k2">(</span><span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> endl<span class="k2">;</span>
<span class="number"> 18</span><span class="k2">}</span>
<span class="number"> 19</span>
<span class="number"> 20</span><span class="k1">template</span><span class="k3">&lt;</span><span class="k1">typename</span> T, <span class="k1">typename</span> C&gt;
<span class="number"> 21</span><span class="k1">typename</span> boost::disable_if<span class="k3">&lt;</span>boost::is_member_function_pointer<span class="k3">&lt;</span>C T::<span class="k3">*</span><span class="k3">&gt;</span>, void&gt;::type output<span class="k2">(</span><span class="k1">const</span> T <span class="k3">&amp;</span>t, <span class="k1">const</span> C T::<span class="k3">*</span> var<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 22</span>
<span class="number"> 23</span>    cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Const pointer "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> t.<span class="k3">*</span>var <span class="k3">&lt;</span><span class="k3">&lt;</span> endl<span class="k2">;</span>
<span class="number"> 24</span><span class="k2">}</span>
<span class="number"> 25</span>
<span class="number"> 26</span><span class="k1">template</span><span class="k3">&lt;</span><span class="k1">typename</span> T, <span class="k1">typename</span> C&gt;
<span class="number"> 27</span><span class="k1">typename</span> boost::disable_if<span class="k3">&lt;</span>boost::is_member_function_pointer<span class="k3">&lt;</span>C T::<span class="k3">*</span><span class="k3">&gt;</span>, void&gt;::type output<span class="k2">(</span> T <span class="k3">&amp;</span>t, C T::<span class="k3">*</span> var<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 28</span>
<span class="number"> 29</span>    cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Non-const pointer "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> t.<span class="k3">*</span>var <span class="k3">&lt;</span><span class="k3">&lt;</span> endl<span class="k2">;</span>
<span class="number"> 30</span><span class="k2">}</span>
<span class="number"> 31</span>
<span class="number"> 32</span><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 33</span>
<span class="number"> 34</span>    Foo f<span class="k2">(</span><span class="n">5</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 35</span>
<span class="number"> 36</span>    output<span class="k2">(</span>f, <span class="k3">&amp;</span>Foo::k<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 37</span>    output<span class="k2">(</span>f, <span class="k3">&amp;</span>Foo::getk<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 38</span><span class="k2">}</span>
</div></div><p>

In this case it is unclear, though, why the third overload would be needed. A const pointer to member/object doesn&#39;t mean that the member/object has to be a constant, it just restricts what you do with the pointer.</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span> i <span class="k3">=</span> <span class="n">10</span><span class="k2">;</span>
<span class="k1">const</span> <span class="k1">int</span><span class="k3">*</span> p <span class="k3">=</span> <span class="k3">&amp;</span>i<span class="k2">;</span> <span class="c">//fine</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (anonymous)</author>
		<pubDate>Wed, 29 Dec 2010 18:52:32 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/605916/896432#target">relpatseht</a> said:</div><div class="quote"><p>
No, pointers to member variables definitely exist. They are very similar to pointers to member functions. They are rarely used (which I can understand, pointers to member functions are rarely used, and classes rarely expose member variables), but they are real and completely necessary for what I am doing.
</p></div></div><p>
They do exist, and they are used all the time, but they are exactly the same as pointers to free variables. If you have a variable of type <span class="source-code"><span class="k1">int</span><span class="k3">*</span></span>, then you can point it to an integer member variable, to an integer local variable, you can allocate a new integer and point there, it doesn&#39;t matter. This is different from function pointers: a pointer to a free function (or static member function) is not compatible with a pointer to a (non-static) member function. In code:
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">class</span> Foobar <span class="k2">{</span>
<span class="number">  2</span>  <span class="k1">int</span> x<span class="k2">;</span>
<span class="number">  3</span>  Foobar<span class="k2">(</span><span class="k1">int</span> _x<span class="k2">)</span> <span class="k2">:</span> x<span class="k2">(</span>_x<span class="k2">)</span> <span class="k2">{</span> <span class="k2">}</span>
<span class="number">  4</span>  <span class="k1">void</span> setX<span class="k2">(</span><span class="k1">int</span> value<span class="k2">)</span> <span class="k2">{</span> x <span class="k3">=</span> value<span class="k2">;</span> <span class="k2">}</span>
<span class="number">  5</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  6</span>
<span class="number">  7</span><span class="k1">void</span> freeSetter<span class="k2">(</span><span class="k1">int</span> value<span class="k2">)</span> <span class="k2">{</span> <span class="c">/* need to do something with value here */</span> <span class="k2">}</span>
<span class="number">  8</span>
<span class="number">  9</span><span class="k1">typedef</span> <span class="k2">(</span><span class="k3">*</span>IntSetter<span class="k2">)</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>
<span class="number"> 11</span>Foobar foobar<span class="k2">(</span><span class="n">23</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span><span class="k1">int</span> baz <span class="k3">=</span> <span class="n">32</span><span class="k2">;</span>
<span class="number"> 13</span>
<span class="number"> 14</span><span class="k1">int</span><span class="k3">*</span> p<span class="k2">;</span>
<span class="number"> 15</span>
<span class="number"> 16</span>p <span class="k3">=</span> <span class="k3">&amp;</span><span class="k2">(</span>foobar.x<span class="k2">)</span><span class="k2">;</span> <span class="c">// this is valid</span>
<span class="number"> 17</span>p <span class="k3">=</span> <span class="k3">&amp;</span>baz<span class="k2">;</span> <span class="c">// so is this</span>
<span class="number"> 18</span>
<span class="number"> 19</span>IntSetter setter <span class="k3">=</span> freeSetter<span class="k2">;</span> <span class="c">// This is OK</span>
<span class="number"> 20</span>setter <span class="k3">=</span> foobar.setX<span class="k2">;</span> <span class="c">// this is not.</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Tobias Dammers)</author>
		<pubDate>Wed, 29 Dec 2010 21:23:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Tobias: indeed pointers to member variables do exist, and they&#39;re not standard pointers. Yes, you can make a standard pointer point to a member variable (unlike with function pointers), too, but pointers to member variables is a different concept. I hadn&#39;t heard of this C++ feature before (I don&#39;t think my C++ book did even mention them), and actually I still can&#39;t think of a situation where they may be useful. I guess it&#39;s one of those obscure C++ features a lot of people (including myself until now) don&#39;t know they exist, and very rarely used.</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">class</span> A
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>public:
<span class="number">  4</span>    <span class="k1">int</span> a<span class="k2">;</span>
<span class="number">  5</span>    <span class="k1">int</span> b<span class="k2">;</span>
<span class="number">  6</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  7</span>
<span class="number">  8</span>main<span class="k2">(</span><span class="k2">)</span>
<span class="number">  9</span><span class="k2">{</span>
<span class="number"> 10</span>    A obj1, obj2<span class="k2">;</span>
<span class="number"> 11</span>    <span class="k1">int</span> A::<span class="k3">*</span>p<span class="k2">;</span>    <span class="c">// pointer to a member of class A, of type int</span>
<span class="number"> 12</span>
<span class="number"> 13</span>    p <span class="k3">=</span> <span class="k3">&amp;</span>A::a<span class="k2">;</span>
<span class="number"> 14</span>    obj1.<span class="k3">*</span>p <span class="k3">=</span> <span class="n">5</span><span class="k2">;</span>    <span class="c">// obj1.a = 5;</span>
<span class="number"> 15</span>    obj2.<span class="k3">*</span>p <span class="k3">=</span> <span class="n">5</span><span class="k2">;</span>    <span class="c">// obj2.a = 5;</span>
<span class="number"> 16</span>
<span class="number"> 17</span>    p <span class="k3">=</span> <span class="k3">&amp;</span>A::b<span class="k2">;</span>
<span class="number"> 18</span>    obj1.<span class="k3">*</span>p <span class="k3">=</span> <span class="n">10</span><span class="k2">;</span>   <span class="c">// obj1.b = 10;   </span>
<span class="number"> 19</span>    obj2.<span class="k3">*</span>p <span class="k3">=</span> <span class="n">10</span><span class="k2">;</span>   <span class="c">// obj2.b = 10;   </span>
<span class="number"> 20</span><span class="k2">}</span>
</div></div><p>

If I understood it correctly that&#39;s how it works <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Oscar Giner)</author>
		<pubDate>Wed, 29 Dec 2010 22:49:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>And people wonder why C++ is considered &quot;hard&quot;... <img src="http://www.allegro.cc/forums/smileys/rolleyes.gif" alt="::)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Tobias Dammers)</author>
		<pubDate>Wed, 29 Dec 2010 22:57:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ah alright. So it seems then a pointer to a constant member variable and a pointer to a member variable are not distinct types as with member functions. I will be looking into the enable_if and disable_if functionality, as that should solve my problem.</p><p>The reason I need member variable pointers, by the way, is for my JavaScript binding library. It makes much more sense (and is really the only plausible way) to store what an object looks like so copies can be made and accessed from script. So you just tell the library where the member variables are and where the member functions are then all the objects created can use that information to access them (considering the script has no idea what the object looks like, it just knows where it is in memory).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (relpatseht)</author>
		<pubDate>Thu, 30 Dec 2010 02:44:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/605916/896609#target">relpatseht</a> said:</div><div class="quote"><p>
So it seems then a pointer to a constant member variable and a pointer to a member variable are not distinct types as with member functions.
</p></div></div><p>
That&#39;s wrong.  They are distinct types and can be overloaded.</p><p>The only issue is a the member variable pointers have higher priority than member function pointers.  For some reason, you can subvert this priority by making the member variable pointer overload of <span class="source-code"><span class="k1">const</span></span> type.</p><p>As proof, this code runs fine:
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="p">#include &lt;iostream&gt;</span>
<span class="number">  2</span><span class="k1">using</span> <span class="k1">namespace</span> std<span class="k2">;</span>
<span class="number">  3</span>
<span class="number">  4</span><span class="k1">class</span> Foo <span class="k2">{</span>
<span class="number">  5</span>public:
<span class="number">  6</span>    Foo<span class="k2">(</span><span class="k1">int</span> k<span class="k2">)</span> <span class="k2">:</span> k<span class="k2">(</span>k<span class="k2">)</span>, v<span class="k2">(</span>k <span class="k3">*</span> <span class="n">10</span><span class="k2">)</span> <span class="k2">{</span><span class="k2">}</span>
<span class="number">  7</span>    
<span class="number">  8</span>    <span class="k1">const</span> <span class="k1">int</span> k<span class="k2">;</span>
<span class="number">  9</span>    <span class="k1">int</span> v<span class="k2">;</span>
<span class="number"> 10</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 11</span>
<span class="number"> 12</span><span class="k1">template</span><span class="k3">&lt;</span><span class="k1">typename</span> T, <span class="k1">typename</span> C&gt;
<span class="number"> 13</span><span class="k1">void</span> output<span class="k2">(</span>T <span class="k3">&amp;</span>t, <span class="k1">const</span> C T::<span class="k3">*</span> var<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 14</span>    
<span class="number"> 15</span>    cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"const "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> t.<span class="k3">*</span>var <span class="k3">&lt;</span><span class="k3">&lt;</span> endl<span class="k2">;</span>
<span class="number"> 16</span><span class="k2">}</span>
<span class="number"> 17</span>
<span class="number"> 18</span><span class="k1">template</span><span class="k3">&lt;</span><span class="k1">typename</span> T, <span class="k1">typename</span> C&gt;
<span class="number"> 19</span><span class="k1">void</span> output<span class="k2">(</span>T <span class="k3">&amp;</span>t, C T::<span class="k3">*</span> var<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 20</span>    
<span class="number"> 21</span>    cout <span class="k3">&lt;</span><span class="k3">&lt;</span> t.<span class="k3">*</span>var <span class="k3">&lt;</span><span class="k3">&lt;</span> endl<span class="k2">;</span>
<span class="number"> 22</span><span class="k2">}</span>
<span class="number"> 23</span>
<span class="number"> 24</span><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 25</span>    
<span class="number"> 26</span>    Foo f<span class="k2">(</span><span class="n">5</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 27</span>    
<span class="number"> 28</span>    output<span class="k2">(</span>f, <span class="k3">&amp;</span>Foo::k<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 29</span>    output<span class="k2">(</span>f, <span class="k3">&amp;</span>Foo::v<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 30</span><span class="k2">}</span>
</div></div><p>
</p><pre>
$ g++ test.cpp -o test &amp;&amp; ./test
const 5
50
</pre><p>

<a href="http://www.allegro.cc/forums/thread/605916/896557#target"> anonymous&#39;s explanation</a> is spot on and worded clearly.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ImLeftFooted)</author>
		<pubDate>Thu, 30 Dec 2010 04:47:48 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>What is surprising to me is that the template argument looking like a pointer-to-member (T C::*) can also be used for passing pointer-to-member-function.</p><p>However, it seems that only GCC will be able to bind a constant member function to it, and other compilers (VC++, Comeau) only compile the following if CONST_CORRECT is not defined.</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="p">#include &lt;iostream&gt;</span>
<span class="number">  2</span><span class="p">#define CONST_CORRECT</span>
<span class="number">  3</span><span class="p">#ifdef CONST_CORRECT</span>
<span class="number">  4</span><span class="p">#define CONSTANT const</span>
<span class="number">  5</span><span class="p">#else</span>
<span class="number">  6</span><span class="p">#define CONSTANT</span>
<span class="number">  7</span><span class="p">#endif</span>
<span class="number">  8</span>
<span class="number">  9</span><span class="k1">struct</span> X
<span class="number"> 10</span><span class="k2">{</span>
<span class="number"> 11</span>    <span class="k1">void</span> <span class="k1">operator</span><span class="k2">(</span><span class="k2">)</span><span class="k2">(</span><span class="k1">int</span> n<span class="k2">)</span> CONSTANT <span class="k2">{</span> std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"X("</span><span class="k3">&lt;</span><span class="k3">&lt;</span> n <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">")\n"</span><span class="k2">;</span> <span class="k2">}</span>
<span class="number"> 12</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 13</span>
<span class="number"> 14</span><span class="k1">struct</span> Y
<span class="number"> 15</span><span class="k2">{</span>
<span class="number"> 16</span>    <span class="k1">void</span> foo<span class="k2">(</span><span class="k1">int</span> n<span class="k2">)</span> CONSTANT <span class="k2">{</span> std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"foo("</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> n <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">")\n"</span><span class="k2">;</span> <span class="k2">}</span>
<span class="number"> 17</span>    X x<span class="k2">;</span>
<span class="number"> 18</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 19</span>
<span class="number"> 20</span><span class="k1">template</span> <span class="k3">&lt;</span><span class="k1">class</span> T, <span class="k1">class</span> C&gt;
<span class="number"> 21</span><span class="k1">void</span> bar<span class="k2">(</span>CONSTANT C<span class="k3">&amp;</span> c, T C::<span class="k3">*</span>ptr<span class="k2">)</span>
<span class="number"> 22</span><span class="k2">{</span>
<span class="number"> 23</span>    <span class="k2">(</span>c.<span class="k3">*</span>ptr<span class="k2">)</span><span class="k2">(</span><span class="n">10</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 24</span><span class="k2">}</span>
<span class="number"> 25</span>
<span class="number"> 26</span><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 27</span><span class="k2">{</span>
<span class="number"> 28</span>    Y y<span class="k2">;</span>
<span class="number"> 29</span>    bar<span class="k2">(</span>y, <span class="k3">&amp;</span>Y::x<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 30</span>    bar<span class="k2">(</span>y, <span class="k3">&amp;</span>Y::foo<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 31</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (anonymous)</author>
		<pubDate>Thu, 30 Dec 2010 18:02:18 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I see. Odd indeed. I should probably look up what the standard says in this case to see who&#39;s doing what wrong. Out of curiosity, what version of GCC were you using, anonymous? I haven&#39;t gone yet tried to compile this library on GCC, but I generally stick very close to standard and have been using templates exclusively on GCC for a long time, so I usually have no trouble porting between GCC and MSVC. Hopefully I won&#39;t have to use #ifdefs to get around this. The enable and disable if functionality will hopefully sort it all out.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (relpatseht)</author>
		<pubDate>Fri, 31 Dec 2010 03:59:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><tt>/me still doesn&#39;t understand how Boost can implement</tt> <span class="source-code">disable_if</span> <tt>and</tt> <span class="source-code">enable_if</span> <tt>purely in code.</tt> <img src="http://www.allegro.cc/forums/smileys/lipsrsealed.gif" alt=":-X" /><br /><tt>/me also hasn&#39;t looked up the documentation, however (nor used either).</tt>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Fri, 31 Dec 2010 07:33:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/605916/896721#target">relpatseht</a> said:</div><div class="quote"><p>
Out of curiosity, what version of GCC were you using, anonymous?
</p></div></div><p>
4.4.1.</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/605916/896746#target">bamccaig</a> said:</div><div class="quote"><p>
/me still doesn&#39;t understand how Boost can implement disable_if and enable_if purely in code. <img src="http://www.allegro.cc/forums/smileys/lipsrsealed.gif" alt=":-X" />
</p></div></div><p>

These are really trivial to implement. enable_if_c (specialized on a bool, not on true_type/false_type) looks like this:</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">template</span> <span class="k3">&lt;</span><span class="k1">bool</span> B, <span class="k1">class</span> T&gt;
<span class="k1">struct</span> enable_if_c<span class="k2">;</span>

<span class="k1">template</span> <span class="k3">&lt;</span><span class="k1">class</span> T&gt;
<span class="k1">struct</span> enable_if_c<span class="k3">&lt;</span><span class="k1">true</span>, T&gt;
<span class="k2">{</span>
    <span class="k1">typedef</span> T type<span class="k2">;</span>
<span class="k2">}</span><span class="k2">;</span>

<span class="k1">template</span> <span class="k3">&lt;</span><span class="k1">class</span> T&gt;
<span class="k1">struct</span> enable_if_c<span class="k3">&lt;</span><span class="k1">false</span>, T&gt;
<span class="k2">{</span><span class="k2">}</span><span class="k2">;</span>
</pre></div></div><p>

That&#39;s it. How it works:</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">template</span> <span class="k3">&lt;</span><span class="k1">class</span> T&gt;
<span class="k1">typename</span> enable_if_c<span class="k3">&lt;</span>Condition<span class="k3">&lt;</span>T&gt;::value, void&gt;::type foo<span class="k2">(</span>T t<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

If Condition&lt;T&gt;::value is false, this causes a Substitution Failure (this specialization does not typedef type), which is Not An Error (this function is simply not an overload candidate, compilation proceeds ignoring this function).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (anonymous)</author>
		<pubDate>Fri, 31 Dec 2010 17:23:20 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I used pointers to members to simplify some code today, so thanks a lot!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kazzmir)</author>
		<pubDate>Sat, 01 Jan 2011 13:05:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I was trying to use them to clean up <a href="http://github.com/bamccaig/rot">rot</a> on Thursday, but it wasn&#39;t compiling and I didn&#39;t have time to figure it out. <img src="http://www.allegro.cc/forums/smileys/sad.gif" alt=":(" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Sun, 02 Jan 2011 01:07:03 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Well, I finally solved a major hangup and had time to come back to this, but there seems to be something wrong with my is_member_function.</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">template</span><span class="k3">&lt;</span><span class="k1">typename</span> R, <span class="k1">typename</span> C&gt;
<span class="number">  2</span>
<span class="number">  3</span><span class="k1">template</span><span class="k3">&lt;</span><span class="k1">bool</span> Cond, <span class="k1">typename</span> T <span class="k3">=</span> void&gt;
<span class="number">  4</span><span class="k1">struct</span> disable_if
<span class="number">  5</span><span class="k2">{</span>
<span class="number">  6</span>  <span class="k1">typedef</span> T type<span class="k2">;</span>
<span class="number">  7</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  8</span>
<span class="number">  9</span><span class="k1">template</span><span class="k3">&lt;</span><span class="k1">typename</span> T&gt;
<span class="number"> 10</span><span class="k1">struct</span> disable_if<span class="k3">&lt;</span><span class="k1">true</span>, T&gt; <span class="k2">{</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 11</span>
<span class="number"> 12</span><span class="k1">struct</span> is_member_function<span class="k3">&lt;</span>R <span class="k2">(</span>C::<span class="k3">*</span><span class="k2">)</span><span class="k2">(</span><span class="k2">)</span><span class="k3">&gt;</span>
<span class="number"> 13</span><span class="k2">{</span> 
<span class="number"> 14</span>    <span class="k1">static</span> <span class="k1">const</span> <span class="k1">bool</span> value <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span> 
<span class="number"> 15</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 16</span>
<span class="number"> 17</span><span class="k1">class</span> Tuple2
<span class="number"> 18</span><span class="k2">{</span>
<span class="number"> 19</span>    public:
<span class="number"> 20</span>        <span class="k1">float</span> LengthSqr<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>  <span class="c">// Works</span>
<span class="number"> 21</span>  Tuple2 Normalize<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// Doesn't work</span>
<span class="number"> 22</span><span class="k2">}</span><span class="k2">;</span>
</div></div><p>

I&#39;m a bit stumped on this one, honestly. &amp;Tuple2::Normalize does not instantiate the above template as one would suspect when passed as a parameter to AddVar. Any ideas?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (relpatseht)</author>
		<pubDate>Mon, 03 Jan 2011 14:23:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The code is really messed up. Probably the problem is that you are trying to instantiate a is_member_function&lt;&amp;Tuple2::Normalize&gt; instead of is_member_function&lt;Tuple2 Tuple2::*()&gt; (passing a value instead of a type, just like trying to instantiate a std::vector&lt;42&gt; instead of std::vector&lt;int&gt;).</p><p>However, type_traits is not something I&#39;d like to implement myself.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (anonymous)</author>
		<pubDate>Wed, 05 Jan 2011 02:16:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>No, I&#39;m not instantiating &amp;Tuple2::Normlize, I&#39;m passing that to my AddVar function, I probably should have emphasized that.</p><p>I&#39;m instantiating T C::*, which, for &amp;Tuple2::Normalize, would be is_member_function&lt;Tuple2 Tuple2::*&gt;. I&#39;m not sure why that comes out as a member function when is_member_function&lt;float Tuple2::*&gt; doesn&#39;t.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (relpatseht)</author>
		<pubDate>Wed, 05 Jan 2011 08:12:19 +0000</pubDate>
	</item>
</rss>
