<?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[assert() und Templates]]></title><description><![CDATA[<p>Folgendes Konstrukt wirft eine Warnung unter MSVC-2013:</p>
<pre><code>template&lt;int ME, int YOU&gt;
inline bool IsKBNK(const Position&amp; p) {
  return true;
}

template&lt;int ME, int YOU&gt;
int EvalKBNK(const Position&amp; p) {
  assert(IsKBNK&lt;ME, YOU&gt;(p));
  return 0;
}
</code></pre>
<p><strong>warning C4002: Zu viele übergebene Parameter für das Makro 'assert'</strong></p>
<p>Habe mir mal die Definition von <strong>assert()</strong> im Release Modus angesehen:</p>
<pre><code>#define assert(_Expression)     ((void)0)
</code></pre>
<p>Liegt das Problem in der Makroexpansion des Templates <strong>IsKBNK&lt;&gt;()</strong>?</p>
<p>Im Debug Betrieb kracht es:</p>
<pre><code>#define assert(_Expression) (void)( (!!(_Expression)) || (_wassert(_CRT_WIDE(#_Expression), _CRT_WIDE(__FILE__), __LINE__), 0) )
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/321823/assert-und-templates</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Jul 2026 21:59:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/321823.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 25 Nov 2013 15:05:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to assert() und Templates on Mon, 25 Nov 2013 15:15:12 GMT]]></title><description><![CDATA[<p>Folgendes Konstrukt wirft eine Warnung unter MSVC-2013:</p>
<pre><code>template&lt;int ME, int YOU&gt;
inline bool IsKBNK(const Position&amp; p) {
  return true;
}

template&lt;int ME, int YOU&gt;
int EvalKBNK(const Position&amp; p) {
  assert(IsKBNK&lt;ME, YOU&gt;(p));
  return 0;
}
</code></pre>
<p><strong>warning C4002: Zu viele übergebene Parameter für das Makro 'assert'</strong></p>
<p>Habe mir mal die Definition von <strong>assert()</strong> im Release Modus angesehen:</p>
<pre><code>#define assert(_Expression)     ((void)0)
</code></pre>
<p>Liegt das Problem in der Makroexpansion des Templates <strong>IsKBNK&lt;&gt;()</strong>?</p>
<p>Im Debug Betrieb kracht es:</p>
<pre><code>#define assert(_Expression) (void)( (!!(_Expression)) || (_wassert(_CRT_WIDE(#_Expression), _CRT_WIDE(__FILE__), __LINE__), 0) )
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2367831</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2367831</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Mon, 25 Nov 2013 15:15:12 GMT</pubDate></item><item><title><![CDATA[Reply to assert() und Templates on Mon, 25 Nov 2013 15:18:26 GMT]]></title><description><![CDATA[<p>Du übergibst an das Makro <code>assert</code> zwei Argumente: <code>IsKBNK&lt;ME</code> und <code>YOU&gt;(p)</code> .<br />
Am Besten du lagerst den Funktionsaufruf aus:</p>
<pre><code>bool isKBNK = IsKBNK&lt;ME, YOU&gt;(p);
assert(isKBNK);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2367838</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2367838</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Mon, 25 Nov 2013 15:18:26 GMT</pubDate></item><item><title><![CDATA[Reply to assert() und Templates on Mon, 25 Nov 2013 15:20:15 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<p>Du übergibst an das Makro <code>assert</code> zwei Argumente: <code>IsKBNK&lt;ME</code> und <code>YOU&gt;(p)</code> .</p>
</blockquote>
<p>...was daran liegt, dass Makros kein C++ können und somit die Templatesyntax nicht kennen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2367839</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2367839</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Mon, 25 Nov 2013 15:20:15 GMT</pubDate></item><item><title><![CDATA[Reply to assert() und Templates on Mon, 25 Nov 2013 15:21:54 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">assert((IsKBNK&lt;ME, YOU&gt;(p)));
</code></pre>
<p>sollte es auch tun.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2367841</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2367841</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Mon, 25 Nov 2013 15:21:54 GMT</pubDate></item><item><title><![CDATA[Reply to assert() und Templates on Mon, 25 Nov 2013 15:22:49 GMT]]></title><description><![CDATA[<p>Stimmt, bei der Übergabe von nur einem Template-Argument kompiliert es anstandslos.</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2367842</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2367842</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Mon, 25 Nov 2013 15:22:49 GMT</pubDate></item><item><title><![CDATA[Reply to assert() und Templates on Mon, 25 Nov 2013 15:24:14 GMT]]></title><description><![CDATA[<p>Andere Lösung:</p>
<pre><code>assert((IsKBNK&lt;ME, YOU&gt;(p))); // Edit: Die Lösung kam zu spät.
</code></pre>
<p>Oder ein kleiner Trick, pack das in eine Headerdatei:</p>
<pre><code>inline void bassert( bool b )
{
    assert(b);
}
</code></pre>
<p>(alles ungetestet)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2367843</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2367843</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Mon, 25 Nov 2013 15:24:14 GMT</pubDate></item><item><title><![CDATA[Reply to assert() und Templates on Mon, 25 Nov 2013 15:23:15 GMT]]></title><description><![CDATA[<p>TyRoXx schrieb:</p>
<blockquote>
<pre><code class="language-cpp">assert((IsKBNK&lt;ME, YOU&gt;(p)));
</code></pre>
<p>sollte es auch tun.</p>
</blockquote>
<p>nein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2367845</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2367845</guid><dc:creator><![CDATA[asfsdas]]></dc:creator><pubDate>Mon, 25 Nov 2013 15:23:15 GMT</pubDate></item><item><title><![CDATA[Reply to assert() und Templates on Mon, 25 Nov 2013 15:26:59 GMT]]></title><description><![CDATA[<p>oh, ich habs eben getestet mit dem onlinecompiler und die lösung mit den klammern geht überraschenderweise. nehme meine aussage oben zurück.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2367848</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2367848</guid><dc:creator><![CDATA[asfsdas]]></dc:creator><pubDate>Mon, 25 Nov 2013 15:26:59 GMT</pubDate></item><item><title><![CDATA[Reply to assert() und Templates on Mon, 25 Nov 2013 15:29:52 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<p>Oder ein kleiner Trick, pack das in eine Headerdatei:</p>
<pre><code>inline void bassert( bool b )
{
    assert(b);
}
</code></pre>
<p>(alles ungetestet)</p>
</blockquote>
<p>Man verliert die Fileinformationen (die viele Compiler hilfreiche anfügen), wo das assert fehlgeschlagen ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2367850</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2367850</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Mon, 25 Nov 2013 15:29:52 GMT</pubDate></item><item><title><![CDATA[Reply to assert() und Templates on Mon, 25 Nov 2013 15:31:18 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<p>Oder ein kleiner Trick, pack das in eine Headerdatei:</p>
<pre><code>inline void bassert( bool b )
{
    assert(b);
}
</code></pre>
</blockquote>
<p>Damit wirfst du aber viele nette Features von <code>assert</code> über Bord, z.B. die Ausgabe des Fehler-Ausdrucks und der Codezeile. Es hat schon einen Grund, wieso <code>assert</code> ein Makro ist...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2367851</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2367851</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 25 Nov 2013 15:31:18 GMT</pubDate></item><item><title><![CDATA[Reply to assert() und Templates on Mon, 25 Nov 2013 15:49:17 GMT]]></title><description><![CDATA[<p>Dann bleiben nur zwei vernünftige Lösungen übrig:</p>
<pre><code>assert((IsKBNK&lt;ME, YOU&gt;(p)));
</code></pre>
<p>oder</p>
<pre><code>assert((IsKBNK&lt;ME&gt;(p)));
</code></pre>
<p>... und YOU parametrisieren.</p>
<pre><code>bool temp = IsKBNK&lt;ME, YOU&gt;(p);
assert(temp);
</code></pre>
<p>wäre auch nicht optimal, da im Release Modus aktiv (Ich meide #ifdefs im Code, wenn möglich).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2367857</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2367857</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Mon, 25 Nov 2013 15:49:17 GMT</pubDate></item><item><title><![CDATA[Reply to assert() und Templates on Mon, 25 Nov 2013 16:02:47 GMT]]></title><description><![CDATA[<blockquote>
<p>Man verliert die Fileinformationen (die viele Compiler hilfreiche anfügen), wo das assert fehlgeschlagen ist.</p>
</blockquote>
<p>Ganz vergessen, tut mir Leid. Schlecht geschlafen, ihr versteht. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /></p>
<p>Na gut:</p>
<pre><code>#define vassert(...) assert((__VA_ARGS__))
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2367864</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2367864</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Mon, 25 Nov 2013 16:02:47 GMT</pubDate></item><item><title><![CDATA[Reply to assert() und Templates on Mon, 25 Nov 2013 18:58:21 GMT]]></title><description><![CDATA[<p>asfsdas schrieb:</p>
<blockquote>
<p>oh, ich habs eben getestet mit dem onlinecompiler und die lösung mit den klammern geht überraschenderweise. nehme meine aussage oben zurück.</p>
</blockquote>
<p>Mich überrascht dass es dich überrascht.<br />
Wieso sollte es nicht gehen? Klar geht das.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2367935</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2367935</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 25 Nov 2013 18:58:21 GMT</pubDate></item></channel></rss>