<?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[Vom Laufzeitfehler zum Compilezeitfehler]]></title><description><![CDATA[<p>Ganz naives Problem, aber ich komme auf keine Lösung. Wie kann ich folgenden simplen Code umbauen, dass es beim Compilieren oder spätestens beim Linken schon einen Fehler gibt und nicht erst zur Laufzeit, wenn nicht gilt: 0 &lt; length &lt; 32</p>
<p>Ich meine mal gelesen zu haben, dass es im neuen C++0x Standard ein Compiletime-Assert geben wird, oder verwechsle ich da etwas?</p>
<pre><code class="language-cpp">// Generates a random word existing of &lt;length&gt; lowercase letters.

template&lt;int length&gt;
bool generate_random_word(std::string* word) {
  assert(word != 0);
  assert(length &gt; 0 &amp;&amp; length &lt; 32);

  word-&gt;clear();
  for (int i = 0; i &lt; length; ++i) {
    word-&gt;push_back(generate_random_lowercase_letter());
  }
  return true;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/282289/vom-laufzeitfehler-zum-compilezeitfehler</link><generator>RSS for Node</generator><lastBuildDate>Sun, 23 Aug 2026 08:09:59 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/282289.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 17 Feb 2011 14:19:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vom Laufzeitfehler zum Compilezeitfehler on Thu, 17 Feb 2011 14:19:23 GMT]]></title><description><![CDATA[<p>Ganz naives Problem, aber ich komme auf keine Lösung. Wie kann ich folgenden simplen Code umbauen, dass es beim Compilieren oder spätestens beim Linken schon einen Fehler gibt und nicht erst zur Laufzeit, wenn nicht gilt: 0 &lt; length &lt; 32</p>
<p>Ich meine mal gelesen zu haben, dass es im neuen C++0x Standard ein Compiletime-Assert geben wird, oder verwechsle ich da etwas?</p>
<pre><code class="language-cpp">// Generates a random word existing of &lt;length&gt; lowercase letters.

template&lt;int length&gt;
bool generate_random_word(std::string* word) {
  assert(word != 0);
  assert(length &gt; 0 &amp;&amp; length &lt; 32);

  word-&gt;clear();
  for (int i = 0; i &lt; length; ++i) {
    word-&gt;push_back(generate_random_lowercase_letter());
  }
  return true;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2022280</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2022280</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Thu, 17 Feb 2011 14:19:23 GMT</pubDate></item><item><title><![CDATA[Reply to Vom Laufzeitfehler zum Compilezeitfehler on Thu, 17 Feb 2011 14:35:00 GMT]]></title><description><![CDATA[<p>So z.B.</p>
<pre><code class="language-cpp">template&lt;int length&gt;
void f()
{
    BOOST_STATIC_ASSERT(((length &gt; 0) &amp;&amp; (length &lt; 32)));
    //oder
    static_assert((length &gt; 0) &amp;&amp; (length &lt; 32), &quot;length out of range&quot;);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2022294</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2022294</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 17 Feb 2011 14:35:00 GMT</pubDate></item><item><title><![CDATA[Reply to Vom Laufzeitfehler zum Compilezeitfehler on Thu, 17 Feb 2011 14:37:41 GMT]]></title><description><![CDATA[<p>Im neuen Standard wird es das Schlüsselwort <code>static_assert</code> geben. Du kannst dir so etwas aber auch ganz leicht selber bauen, falls du kein C++0x hast:</p>
<pre><code class="language-cpp">template &lt;bool T&gt; class static_assert;

template&lt;&gt; class static_assert&lt;true&gt;{};

// ...

static_assert&lt;(length &gt; 0 &amp;&amp; length &lt; 32)&gt;();
</code></pre>
<p>Oder um dem noch etwas Syntaxzucker zu verpassen, ausnahmsweise mal ein Makro:</p>
<pre><code class="language-cpp">#define STATIC_ASSERT(x) static_assert&lt;(x)&gt;()

// ...

STATIC_ASSERT(length &gt; 0 &amp;&amp; length &lt; 32);
</code></pre>
<p>edi: 29 Sekunden zu spät. Immerhin zeigt mein Beitrag wie man so etwas selber machen kann. A propos, @Threadersteller: Hast du verstanden, wie mein static_assert funktioniert? Das ist ein grundlegendes Konstrukt in der Templatemetaprogrammierung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2022295</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2022295</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 17 Feb 2011 14:37:41 GMT</pubDate></item><item><title><![CDATA[Reply to Vom Laufzeitfehler zum Compilezeitfehler on Thu, 17 Feb 2011 16:16:59 GMT]]></title><description><![CDATA[<p>Elegante Lösung, sehr schön!<br />
Danke und Gruss,<br />
T.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2022369</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2022369</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Thu, 17 Feb 2011 16:16:59 GMT</pubDate></item></channel></rss>