<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[[C++0x&#x2F;TR1] Feststellen, ob Member-Funktions-Typ const und&#x2F;oder volatile ist?]]></title><description><![CDATA[<p>Hallo,</p>
<p>langsam zieht die Verwendung von TR1 etc. stark an. Der Header &lt;type_traits&gt; stellt seit TR1 und boost ein template <code>is_const</code> zur Verfügung, mit dem man feststellen können soll, ob ein Typ <code>const</code> ist.</p>
<p>Nun möchte ich testen, ob die Signatur einer Member-Funktion <code>const</code> und/oder <code>volatile</code> ist, was jedoch nicht wie erwartet funktioniert:</p>
<pre><code class="language-cpp">cout &lt;&lt; is_const&lt;void (dummy::*)() const&gt;::value;
</code></pre>
<p>Diese Anweisung gibt mir &quot;0&quot; zurück auf der Konsole. Wie teste ich richtig, ob ein <code>const</code> -Qualifier vorhanden ist?</p>
<p>Bin für jeden Tipp dankbar <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/286088/c-0x-tr1-feststellen-ob-member-funktions-typ-const-und-oder-volatile-ist</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 02:35:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/286088.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 03 May 2011 13:20:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [C++0x&#x2F;TR1] Feststellen, ob Member-Funktions-Typ const und&#x2F;oder volatile ist? on Tue, 03 May 2011 13:20:12 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>langsam zieht die Verwendung von TR1 etc. stark an. Der Header &lt;type_traits&gt; stellt seit TR1 und boost ein template <code>is_const</code> zur Verfügung, mit dem man feststellen können soll, ob ein Typ <code>const</code> ist.</p>
<p>Nun möchte ich testen, ob die Signatur einer Member-Funktion <code>const</code> und/oder <code>volatile</code> ist, was jedoch nicht wie erwartet funktioniert:</p>
<pre><code class="language-cpp">cout &lt;&lt; is_const&lt;void (dummy::*)() const&gt;::value;
</code></pre>
<p>Diese Anweisung gibt mir &quot;0&quot; zurück auf der Konsole. Wie teste ich richtig, ob ein <code>const</code> -Qualifier vorhanden ist?</p>
<p>Bin für jeden Tipp dankbar <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2057775</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2057775</guid><dc:creator><![CDATA[*rant*]]></dc:creator><pubDate>Tue, 03 May 2011 13:20:12 GMT</pubDate></item><item><title><![CDATA[Reply to [C++0x&#x2F;TR1] Feststellen, ob Member-Funktions-Typ const und&#x2F;oder volatile ist? on Tue, 03 May 2011 13:46:16 GMT]]></title><description><![CDATA[<p>/rant/ schrieb:</p>
<blockquote>
<pre><code class="language-cpp">cout &lt;&lt; is_const&lt;void (dummy::*)() const&gt;::value;
</code></pre>
<p>Diese Anweisung gibt mir &quot;0&quot; zurück auf der Konsole.</p>
</blockquote>
<p>Der Funktions<em>zeiger</em> an sich ist ja auch nicht const, sondern nur die Funktion. Genauso wird</p>
<pre><code class="language-cpp">cout &lt;&lt; is_const&lt;char const *&gt;::value;
</code></pre>
<p>auch 0 bzw false ausgeben, wohingegen</p>
<pre><code class="language-cpp">cout &lt;&lt; is_const&lt;char * const&gt;::value;
</code></pre>
<p>1 bzw true liefern wird. is_const gibt Dir die &quot;top-level-constness&quot; zurück.</p>
<p>/rant/ schrieb:</p>
<blockquote>
<p>Wie teste ich richtig, ob ein <code>const</code> -Qualifier vorhanden ist?</p>
</blockquote>
<p>Musst Du mal gucken. Vielleicht klappt ja schon so etwas wie is_const&lt;remove_pointer&lt;XXX&gt;::type&gt;::value. Bin mir da bei nicht-statischen Elementfunktionen nicht sicher, ob das so geht.</p>
<p>Im Notfall bastelst Du Dir Deine eigene Traitsklasse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2057790</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2057790</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Tue, 03 May 2011 13:46:16 GMT</pubDate></item><item><title><![CDATA[Reply to [C++0x&#x2F;TR1] Feststellen, ob Member-Funktions-Typ const und&#x2F;oder volatile ist? on Tue, 03 May 2011 14:02:00 GMT]]></title><description><![CDATA[<p>is_const ist für Objekt-Typen, nicht für Funktionstypen gedacht.<br />
Ich hab jetzt auf die Schnelle bei boost nichts finden können was das erledigt was du suchst. Sollte aber nicht zu schwer zu implementieren sein:</p>
<p><strong>C++0x</strong>:</p>
<pre><code class="language-cpp">template &lt;typename F&gt; 
struct is_const_mem_fun_pointer: public false_type
{};

template &lt;class T, typename R, typename ... A&gt;
struct is_const_mem_fun_pointer&lt;R (T::*)(A...) const&gt; : public true_type
{};

template &lt;class T, typename R, typename ... A&gt;
struct is_const_mem_fun_pointer&lt;R (T::*)(A...) const volatile&gt; : public true_type
{};
</code></pre>
<p>Bei C++03 wirds schwieriger, da musst du dir für alle Parameterzahlen eigene Spezialisierungen schreiben *wärgs*. Siehe hier:</p>
<p><a href="http://www.boost.org/doc/libs/1_37_0/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp" rel="nofollow">http://www.boost.org/doc/libs/1_37_0/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2057810</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2057810</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 03 May 2011 14:02:00 GMT</pubDate></item><item><title><![CDATA[Reply to [C++0x&#x2F;TR1] Feststellen, ob Member-Funktions-Typ const und&#x2F;oder volatile ist? on Tue, 03 May 2011 14:07:27 GMT]]></title><description><![CDATA[<p>Danke, die Variante mit <code>remove_pointer</code> hatte ich bereits probiert und funktioniert natürlich nicht, aus dem gleichen Grund wie du geschrieben hast. Hingegen sieht das boost Zeugs dort genau nach dem aus, was ich suche. Vielen Dank, pumuckl! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>PS: Ich warte sehnlichst auf bessere Untersützung für Variadic Templates. Das würde mein Leben so viel angenehmer machen. <code>decltype</code> und solche Dinge funktionieren super, aber das braucht man auch kaum <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2057818</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2057818</guid><dc:creator><![CDATA[*rant*]]></dc:creator><pubDate>Tue, 03 May 2011 14:07:27 GMT</pubDate></item></channel></rss>