<?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[Compilerfehler künstlich erzeugen]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein Konstrukt programmiert, dass ungefähr folgende Struktur hat:</p>
<pre><code class="language-cpp">template&lt;int AnzahlRaeder, int AnzahlHinterraeder, int Modus&gt;
class Fahrzeug
{
    public:
         Auto()
         {
            //Hier wäre eine Überprüfung notwendig, ob das Objekt so überhaupt erzeugbar ist.
         }

    private:

}
</code></pre>
<p>Insgesamt habe ich hierzu zwei Wünsche oder Ideen, weiß aber nicht, ob es überhaupt möglich ist.</p>
<p>Zum einen ist klar, dass ein Fahrzeug welches mehr Hinterräder hat als Räder insgesamt keinen Sinn ergibt. Da diese Angaben schon zur Compilezeit feststehen, meine Frage: Kann man einen Compilerfehler erzeugen, wenn folgende Bedingung erfüllt ist:</p>
<pre><code class="language-cpp">AnzahlHinterraeder &gt; AnzahlRaeder
</code></pre>
<p>Zum anderen wird ein Modus dort oben angegeben. Diesen möchte ich über Bitflags setzten. Beispielsweise wie folgt:</p>
<p>Bit:n, Bit:n-1, ..., Bit:1, Bit:0</p>
<p>Bit:1 Handelt es sich um ein Auto ja/nein<br />
Bit:2 Handelt es sich um ein Sportwagen ja/nein<br />
Bit:3 ...</p>
<p>Meine Idee ist, per Enum Werte festlegen:</p>
<pre><code class="language-cpp">enum auto_eigenschaften{ISTAUTO = 1, ISTSPORTWAGEN = 2, ISTEIGENSCHAFTDREI = 4, ISTEIGENSCHAFTVIER = 7};
</code></pre>
<p>und schließend überprüfen ob diese Eigenschaften zusammen Sinn ergeben. Dieses könnte dann per Bitmasken passieren.</p>
<p>Und auch hier wie schon oben, wenn es keinen Sinn gibt, Compilerfehler.</p>
<p>Wie immer bin ich über jeden Tipp dankbar.</p>
<p>Viele Grüße<br />
MM</p>
<p>PS: Könnt ihr mir einen Tip geben, wo man so etwas am besten nachschlagen kann oder googlen kann? Leider viel mir kein sinniger Begriff ein.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/247418/compilerfehler-künstlich-erzeugen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 13:52:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/247418.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 10 Aug 2009 18:00:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Compilerfehler künstlich erzeugen on Mon, 10 Aug 2009 18:00:18 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein Konstrukt programmiert, dass ungefähr folgende Struktur hat:</p>
<pre><code class="language-cpp">template&lt;int AnzahlRaeder, int AnzahlHinterraeder, int Modus&gt;
class Fahrzeug
{
    public:
         Auto()
         {
            //Hier wäre eine Überprüfung notwendig, ob das Objekt so überhaupt erzeugbar ist.
         }

    private:

}
</code></pre>
<p>Insgesamt habe ich hierzu zwei Wünsche oder Ideen, weiß aber nicht, ob es überhaupt möglich ist.</p>
<p>Zum einen ist klar, dass ein Fahrzeug welches mehr Hinterräder hat als Räder insgesamt keinen Sinn ergibt. Da diese Angaben schon zur Compilezeit feststehen, meine Frage: Kann man einen Compilerfehler erzeugen, wenn folgende Bedingung erfüllt ist:</p>
<pre><code class="language-cpp">AnzahlHinterraeder &gt; AnzahlRaeder
</code></pre>
<p>Zum anderen wird ein Modus dort oben angegeben. Diesen möchte ich über Bitflags setzten. Beispielsweise wie folgt:</p>
<p>Bit:n, Bit:n-1, ..., Bit:1, Bit:0</p>
<p>Bit:1 Handelt es sich um ein Auto ja/nein<br />
Bit:2 Handelt es sich um ein Sportwagen ja/nein<br />
Bit:3 ...</p>
<p>Meine Idee ist, per Enum Werte festlegen:</p>
<pre><code class="language-cpp">enum auto_eigenschaften{ISTAUTO = 1, ISTSPORTWAGEN = 2, ISTEIGENSCHAFTDREI = 4, ISTEIGENSCHAFTVIER = 7};
</code></pre>
<p>und schließend überprüfen ob diese Eigenschaften zusammen Sinn ergeben. Dieses könnte dann per Bitmasken passieren.</p>
<p>Und auch hier wie schon oben, wenn es keinen Sinn gibt, Compilerfehler.</p>
<p>Wie immer bin ich über jeden Tipp dankbar.</p>
<p>Viele Grüße<br />
MM</p>
<p>PS: Könnt ihr mir einen Tip geben, wo man so etwas am besten nachschlagen kann oder googlen kann? Leider viel mir kein sinniger Begriff ein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1758464</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1758464</guid><dc:creator><![CDATA[MrMilk]]></dc:creator><pubDate>Mon, 10 Aug 2009 18:00:18 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler künstlich erzeugen on Mon, 10 Aug 2009 18:14:53 GMT]]></title><description><![CDATA[<p>Such mal nach <code>static_assert</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1758468</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1758468</guid><dc:creator><![CDATA[Registrierter Troll]]></dc:creator><pubDate>Mon, 10 Aug 2009 18:14:53 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler künstlich erzeugen on Mon, 10 Aug 2009 18:51:03 GMT]]></title><description><![CDATA[<p>Registrierter Troll schrieb:</p>
<blockquote>
<p>Such mal nach <code>static_assert</code> .</p>
</blockquote>
<p>Ist das Teil des Standards?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1758476</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1758476</guid><dc:creator><![CDATA[uzuzuzuzuz]]></dc:creator><pubDate>Mon, 10 Aug 2009 18:51:03 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler künstlich erzeugen on Mon, 10 Aug 2009 18:54:09 GMT]]></title><description><![CDATA[<pre><code>#pragma error(bla)
</code></pre>
<p>Meine ich schonmal irgendwo gelesen zu haben.</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1758481</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1758481</guid><dc:creator><![CDATA[theliquidwave]]></dc:creator><pubDate>Mon, 10 Aug 2009 18:54:09 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler künstlich erzeugen on Mon, 10 Aug 2009 18:56:17 GMT]]></title><description><![CDATA[<p>uzuzuzuzuz schrieb:</p>
<blockquote>
<p>Registrierter Troll schrieb:</p>
<blockquote>
<p>Such mal nach <code>static_assert</code> .</p>
</blockquote>
<p>Ist das Teil des Standards?</p>
</blockquote>
<p>Noch nicht. Ist aber für C++0x vorgeschlagen und wird von vielen Compilern schon heute verstanden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1758482</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1758482</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 10 Aug 2009 18:56:17 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler künstlich erzeugen on Mon, 10 Aug 2009 18:58:01 GMT]]></title><description><![CDATA[<p>uzuzuzuzuz schrieb:</p>
<blockquote>
<p>Registrierter Troll schrieb:</p>
<blockquote>
<p>Such mal nach <code>static_assert</code> .</p>
</blockquote>
<p>Ist das Teil des Standards?</p>
</blockquote>
<p>Das weiß ich auch nicht, aber der S_StaticAssert für boolsche Bedingungen ist schnell geschrieben</p>
<pre><code class="language-cpp">template &lt;bool condition&gt;
struct S_StaticAssert
{};

template&lt;&gt;
struct S_StaticAssert&lt;true&gt;
{
	static void check(){;}
};
</code></pre>
<pre><code class="language-cpp">S_StaticAssert&lt;(1 &lt; 2)&gt;::check(); //kompiliert;
S_StaticAssert&lt;(1 &gt; 2)&gt;::check(); //kompiliert nicht;
</code></pre>
<p>Greets<br />
Tobi _logoff</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1758483</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1758483</guid><dc:creator><![CDATA[Tobi_logoff]]></dc:creator><pubDate>Mon, 10 Aug 2009 18:58:01 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler künstlich erzeugen on Mon, 10 Aug 2009 20:02:15 GMT]]></title><description><![CDATA[<p>Sowohl die Loki-Bibliothek als auch Boost haben ein static_assert bzw. ein BOOST_STATIC_ASSERT - und beide sind standardkonform.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1758509</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1758509</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 10 Aug 2009 20:02:15 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler künstlich erzeugen on Mon, 10 Aug 2009 20:37:51 GMT]]></title><description><![CDATA[<p>Zuerst vielen Dank <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>
<p>Mmmh,</p>
<p>was genau ist nach derzeitigem Standard nun erlaubt? Bei</p>
<pre><code class="language-cpp">#include &lt;boost/static_assert.hpp&gt;
</code></pre>
<p>findet der die Datei nicht.</p>
<p>Bzw. der neue Standard brauch doch noch ein 3/4 Jahr, oder? Bei <a href="http://heise.de" rel="nofollow">heise.de</a> hab ich so etwas gelesen.</p>
<p>Viele Grüße<br />
MM</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1758516</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1758516</guid><dc:creator><![CDATA[MrMilk]]></dc:creator><pubDate>Mon, 10 Aug 2009 20:37:51 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler künstlich erzeugen on Mon, 10 Aug 2009 21:00:49 GMT]]></title><description><![CDATA[<p>MrMilk schrieb:</p>
<blockquote>
<p>Zuerst vielen Dank <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>
<p>Mmmh,</p>
<p>was genau ist nach derzeitigem Standard nun erlaubt? Bei</p>
<pre><code class="language-cpp">#include &lt;boost/static_assert.hpp&gt;
</code></pre>
<p>findet der die Datei nicht.</p>
<p>Bzw. der neue Standard brauch doch noch ein 3/4 Jahr, oder? Bei <a href="http://heise.de" rel="nofollow">heise.de</a> hab ich so etwas gelesen.</p>
<p>Viele Grüße<br />
MM</p>
</blockquote>
<p>Das Schlüsselwort &quot;static_assert&quot; kommt erst mit dem neuen Standard. Boost ist eine externe Bibliothek, die auf sehr vielen Systemen verfügbar ist und ein äquivalentes Konstrukt bietet. Dieses Konstrukt ist aber mit Mitteln aus dem (jetzigen) C++ Standard aufgebaut - es dürfte sich um das von Tobi_logoff gezeigte oder etwas Ähnliches handeln.<br />
Du kannst also entweder<br />
1.) gucken, ob dein Compiler schon static_assert kennt<br />
2.) die Boost Bibliothek installieren und benutzen<br />
3.) den entsprechenden Teil aus boost abgucken<br />
4.) Tobi_logoffs Code benutzen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1758529</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1758529</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 10 Aug 2009 21:00:49 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler künstlich erzeugen on Tue, 11 Aug 2009 00:32:32 GMT]]></title><description><![CDATA[<p>Benutz lieber den Code von hier. Boost willst du dir nicht antun und der neue Standard braucht eh noch Jahre.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1758567</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1758567</guid><dc:creator><![CDATA[randnotiz]]></dc:creator><pubDate>Tue, 11 Aug 2009 00:32:32 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler künstlich erzeugen on Tue, 11 Aug 2009 05:06:43 GMT]]></title><description><![CDATA[<p>randnotiz schrieb:</p>
<blockquote>
<p>Benutz lieber den Code von hier. Boost willst du dir nicht antun und der neue Standard braucht eh noch Jahre.</p>
</blockquote>
<p>&quot;Boost willst du dir nicht antun&quot; ist ungefähr so sinnvoll wie &quot;das funktioniert nicht&quot; als Fehlermeldung. Warum sollte er es sich nciht antun wollen? Boost ist in 5-10 Minuten instaliert und einsatzbereit, und man muss ja nicht gleich alle Bibliotheken daraus benutzen. Fürs static_assert würde ich zwar auch eher die Loki-Version benutzen, allerdings wenn man boost bereits installiert hat ist das auch durchaus benutzbar. Die oben gepostete Version würde ich vermutlich nicht nutzen, da sie nicht so besonders ausgereift ist.<br />
Hier die Loki-Version:</p>
<pre><code class="language-cpp">namespace Loki
{
  template&lt;int&gt; struct CompileTimeError;
  template&lt;&gt; struct CompileTimeError&lt;true&gt; {};
}
////////////////////////////////////////////////////////////////////////////////
// macro STATIC_CHECK
// Invocation: STATIC_CHECK(expr, id)
// where:
// expr is a compile-time integral or pointer expression
// id is a C++ identifier that does not need to be defined
// If expr is zero, id will appear in a compile-time error message.
////////////////////////////////////////////////////////////////////////////////
#define LOKI_STATIC_CHECK(expr, msg) \
 { Loki::CompileTimeError&lt;((expr) != 0)&gt; ERROR_##msg; (void)ERROR_##msg; }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1758589</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1758589</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 11 Aug 2009 05:06:43 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler künstlich erzeugen on Tue, 11 Aug 2009 06:26:03 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>...<br />
da sie nicht so besonders ausgereift ist.<br />
...</p>
</blockquote>
<p>Könntest du mir das erklären? Ich seh zur Loki version nur den Unterschied bool und int, in der eigentlichen Metafunktion. <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/1758601</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1758601</guid><dc:creator><![CDATA[Tobi_logoff]]></dc:creator><pubDate>Tue, 11 Aug 2009 06:26:03 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler künstlich erzeugen on Tue, 11 Aug 2009 08:03:45 GMT]]></title><description><![CDATA[<p>Tobi_logoff schrieb:</p>
<blockquote>
<p>Könntest du mir das erklären? Ich seh zur Loki version nur den Unterschied bool und int, in der eigentlichen Metafunktion. <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>
</blockquote>
<p>Zum einen muss man in deinem Fall den Ausdruck zwischen dem struct-Namen und dem ::check() vergraben, da hätte zumindest noch ein Makro geholfen.<br />
Zum zweiten hat das Loki-Beispiel den Vorteil, dass man eine Aussagekräftige Fehlermeldung dazupacken kann:</p>
<pre><code class="language-cpp">int main()
{
  S_StaticAssert&lt;(1 &lt; 2)&gt;::check(); //kompiliert;
  S_StaticAssert&lt;(1 &gt; 2)&gt;::check(); //kompiliert nicht; //line 30

  LOKI_STATIC_CHECK(1 &lt; 2, argument_must_be_less_than_2);
  LOKI_STATIC_CHECK(1 &gt; 2, argument_must_be_greater_than_2);
}
</code></pre>
<pre><code>In function 'int main()':
Line 30: error: 'check' is not a member of 'S_StaticAssert&lt;false&gt;'

In function 'int main()':
Line 33: error: aggregate 'Loki::CompileTimeError&lt;0&gt; [b]ERROR_argument_must_be_greater_than_2[/b]' has incomplete type and cannot be defined
</code></pre>
<p>Ich sag ja nicht dass es völliger Blödsinn ist, der Ansatz ist der richtige. Es fehlen bloß ein paar Kleinigkeiten, und da es die schon fertig zu holen gibt, braucht man das Rad nicht neu erfinden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1758632</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1758632</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 11 Aug 2009 08:03:45 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler künstlich erzeugen on Tue, 11 Aug 2009 08:12:27 GMT]]></title><description><![CDATA[<p>Boost ist eklig fett.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1758637</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1758637</guid><dc:creator><![CDATA[ady]]></dc:creator><pubDate>Tue, 11 Aug 2009 08:12:27 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler künstlich erzeugen on Tue, 11 Aug 2009 08:17:03 GMT]]></title><description><![CDATA[<p>Vielen Dank. Ich habe mich für die Lösung von pumuckl entschieden (es gab viele Google treffer <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="🙂"
    /> ). Insgesamt ist mein Problem, dass ich nur nach std Programmieren darf und alles was dort nicht enthalten ist, bringt mir ärger.</p>
<p>Leider ist mir noch einzweiter Fall eingefallen, den ich gerne mit Comilerfehlern abdecken möchte. Aber hier habe ich die Vermutung, dass man es nicht lösen kann:</p>
<pre><code class="language-cpp">template &lt;int Groesse&gt;
class Parkhaus
{
    public:
        Parkplatz()
        {
        }

    protected:
        Parkplatz&lt;Groesse&gt; Parkeinheiten;

}

void main (int, char*)[]
{
    Parkhaus&lt;30&gt; p1;
    Parkhaus&lt;34&gt; p2;

    //Geld wird investiert, Parkhäuser werden zusammen geführt

    p1 = p1 + p2; 
}
</code></pre>
<p>An dieser Stelle sehe ich noch ein gewaltiges Problem. Und zwar hat p1 nach der Vereinigung der Parkhäuser nun die Kapazität von 64 Parkplätzen. Die Addition der beiden Parkhäuser ist kein Problem. Mit Macros kann ich das Maximum auswerten und ein neues Objekt zurück geben. Aber kann ich dieses Objekt überhaupt zuweisen? Die Typen stimmen ja nicht mehr überein.</p>
<p>Oder liege ich komplett neben der Spur? Wie immer bin ich über jeden Tipp dankbar.</p>
<p>Viele Grüße<br />
MM</p>
<p>Viele Grüße<br />
MM</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1758643</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1758643</guid><dc:creator><![CDATA[MrMilk]]></dc:creator><pubDate>Tue, 11 Aug 2009 08:17:03 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler künstlich erzeugen on Tue, 11 Aug 2009 08:23:05 GMT]]></title><description><![CDATA[<p>Seltsames Beispiel. Und ein noch seltsameres main() <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Spricht irgendwas dagegen, die Anzahl der Parkeinheiten einfach als Parameter an den Ctor von Parkhaus zu übergeben?</p>
<p>Stefan.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1758646</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1758646</guid><dc:creator><![CDATA[DStefan]]></dc:creator><pubDate>Tue, 11 Aug 2009 08:23:05 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler künstlich erzeugen on Tue, 11 Aug 2009 08:31:48 GMT]]></title><description><![CDATA[<p>Ich denke mal, dass in diesem Fall die einfache Addition der Größen das Problem ist. So einfach liegt der Fall nämlich nicht. Effektiv entstehen ja nicht mehr Parkplätze. Also müßte im gleichen Zug Parkhaus 2 seine Parkplätze einbüßen - worauf es dann zur Bauruine wird, oder was auch immer. Es könnte sich sogar selbst abreißen - besser wäre es jedoch, dies von Parkhaus 1 aus zu machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1758654</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1758654</guid><dc:creator><![CDATA[Bitsy]]></dc:creator><pubDate>Tue, 11 Aug 2009 08:31:48 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler künstlich erzeugen on Tue, 11 Aug 2009 08:35:57 GMT]]></title><description><![CDATA[<p>MrMilk schrieb:</p>
<blockquote>
<p>Leider ist mir noch einzweiter Fall eingefallen, den ich gerne mit Comilerfehlern abdecken möchte.</p>
</blockquote>
<p>Dieser Code ist ein einziger Compilerfehler. Mission accomplished.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1758658</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1758658</guid><dc:creator><![CDATA[Registrierter Troll]]></dc:creator><pubDate>Tue, 11 Aug 2009 08:35:57 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler künstlich erzeugen on Tue, 11 Aug 2009 08:41:52 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Tobi_logoff schrieb:</p>
<blockquote>
<p>Könntest du mir das erklären? Ich seh zur Loki version nur den Unterschied bool und int, in der eigentlichen Metafunktion. <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>
</blockquote>
<p>Zum einen muss man in deinem Fall den Ausdruck zwischen dem struct-Namen und dem ::check() vergraben, da hätte zumindest noch ein Makro geholfen.<br />
Zum zweiten hat das Loki-Beispiel den Vorteil, dass man eine Aussagekräftige Fehlermeldung dazupacken kann:</p>
<pre><code class="language-cpp">int main()
{
  S_StaticAssert&lt;(1 &lt; 2)&gt;::check(); //kompiliert;
  S_StaticAssert&lt;(1 &gt; 2)&gt;::check(); //kompiliert nicht; //line 30
  
  LOKI_STATIC_CHECK(1 &lt; 2, argument_must_be_less_than_2);
  LOKI_STATIC_CHECK(1 &gt; 2, argument_must_be_greater_than_2);
}
</code></pre>
<pre><code>In function 'int main()':
Line 30: error: 'check' is not a member of 'S_StaticAssert&lt;false&gt;'

In function 'int main()':
Line 33: error: aggregate 'Loki::CompileTimeError&lt;0&gt; [b]ERROR_argument_must_be_greater_than_2[/b]' has incomplete type and cannot be defined
</code></pre>
<p>Ich sag ja nicht dass es völliger Blödsinn ist, der Ansatz ist der richtige. Es fehlen bloß ein paar Kleinigkeiten, und da es die schon fertig zu holen gibt, braucht man das Rad nicht neu erfinden.</p>
</blockquote>
<p>Danke... <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="👍"
    /><br />
hätte schon gedacht ich sitze einem Fehler auf, den ich noch nicht gesehen habe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1758661</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1758661</guid><dc:creator><![CDATA[Tobi_logoff]]></dc:creator><pubDate>Tue, 11 Aug 2009 08:41:52 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler künstlich erzeugen on Tue, 11 Aug 2009 08:43:05 GMT]]></title><description><![CDATA[<p>DStefan schrieb:</p>
<blockquote>
<p>Seltsames Beispiel. Und ein noch seltsameres main() <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Uhh ja, da hast du recht.</p>
<p>Mir geht es nur darum, was passiert, wenn man etwas zuweisen möchte und der Templateparamter (heißt es so, bin mir da nicht sicher?) nicht der gleiche ist.</p>
<p>Ist dieses grundsätzlich nicht möglich oder muss man dann etwas bestimmtes machen...</p>
<p>Viele Grüße<br />
MM</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1758663</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1758663</guid><dc:creator><![CDATA[MrMilk]]></dc:creator><pubDate>Tue, 11 Aug 2009 08:43:05 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler künstlich erzeugen on Tue, 11 Aug 2009 08:47:01 GMT]]></title><description><![CDATA[<p>ady schrieb:</p>
<blockquote>
<p>Boost ist eklig fett.</p>
</blockquote>
<p>Wo ist Boost bitteschön &quot;fett&quot;? Die Boost-Bibliotheken sind eine Sammlung von vielen einzelnen Bibliotheken, häufig verwendet man aber in einem Projekt davon nur eine Handvoll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1758666</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1758666</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 11 Aug 2009 08:47:01 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler künstlich erzeugen on Tue, 11 Aug 2009 08:52:24 GMT]]></title><description><![CDATA[<p>Dann will er wohl einen speziellen + Operator</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1758670</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1758670</guid><dc:creator><![CDATA[Bitsy]]></dc:creator><pubDate>Tue, 11 Aug 2009 08:52:24 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler künstlich erzeugen on Tue, 11 Aug 2009 09:58:04 GMT]]></title><description><![CDATA[<p>MrMilk schrieb:</p>
<blockquote>
<p>Mir geht es nur darum, was passiert, wenn man etwas zuweisen möchte und der Templateparamter (heißt es so, bin mir da nicht sicher?) nicht der gleiche ist.</p>
</blockquote>
<p>Das hängt davon ab worum es geht. Wenn es sich z.B. um Vektoren (im Mathematischen Sinn) handelt und der Templateparameter die Zahl der Dimensionen angibt, dann kann man sie einfach nicht addieren. Wenns sich um etwas handelt, wo das Ergebnis einen neuen Templateparameter hat, muss man den entsprechend berechnen, bei deinen Parkhäusern würde ich (wenn auch unter Zahnschmerzen, weil das Beispiel haarsträubend ist) in etwa folgendes machen:</p>
<pre><code class="language-cpp">template &lt;int n1, int n2&gt;
parkhaus&lt;n1+n2&gt; operator+ (parkhaus&lt;n1&gt; const&amp; lhs, parkhaus&lt;n2&gt; const&amp; rhs)
{
  parkhaus&lt;n1+n2&gt; presult;
  presult.setAdresse( funnyAdressMix(lhs.getAdresse(), rhs.getAdresse() );
  presult.setParkPreis( (n1*lhs.getParkPreis() + n2*rhs.getParkPreis())/(n1+n2) );
  //und was auch immer die Semantik so einer sinnfreien Addition sein könnte ;)
};
</code></pre>
<p>Ich hab noch nie gesehen wie jemand Bauwerke addiert. Du?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1758715</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1758715</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 11 Aug 2009 09:58:04 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler künstlich erzeugen on Tue, 11 Aug 2009 10:15:19 GMT]]></title><description><![CDATA[<p>Hallo Pumuckl,</p>
<p>na klar ist die Semantik nicht besonders gut gewählt. Eventuell wäre das Mischen von Flüssigkeiten besser gewesen <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="🙂"
    /> Ist mit leider erst jetzt eingefallen.</p>
<p>Aber was du da programmierst hast, hatte ich auch vor. Für mich ist nun interessant, was passiert bei einer Zuweisung?</p>
<p>Muss ich dann immer ein neues Objekt deklarieren. Im Allgemeinen ist n1 + n2 ungleich n1.<br />
Dann sofort ein Objekt Parkhaus&lt;n1 + n2&gt; neuespkh deklarieren? Das ganze nach p1 zuweisen sollte ja nicht klappen.</p>
<p>Viele Grüße<br />
MM</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1758728</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1758728</guid><dc:creator><![CDATA[MrMilk]]></dc:creator><pubDate>Tue, 11 Aug 2009 10:15:19 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler künstlich erzeugen on Tue, 11 Aug 2009 11:01:30 GMT]]></title><description><![CDATA[<p>MrMilk schrieb:</p>
<blockquote>
<p>Dann sofort ein Objekt Parkhaus&lt;n1 + n2&gt; neuespkh deklarieren? Das ganze nach p1 zuweisen sollte ja nicht klappen.</p>
</blockquote>
<p>Richtig. Templateparameter sind eben keine Eigenschaft, in der sich Objekte einer &quot;Sorte&quot; (d.h. eines Typs, einer Klasse) unterscheiden, sondern sie unterscheiden unterschiedliche &quot;Sorten&quot; (Typen/Klassen) voneinander.<br />
Ob man jetzt Member oder Templateparameter nimmt ist eine Designfrage, die davon abhängt, was man damit modellieren will.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1758768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1758768</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 11 Aug 2009 11:01:30 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler künstlich erzeugen on Tue, 11 Aug 2009 11:33:07 GMT]]></title><description><![CDATA[<p>Super vielen Dank <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>
<p>Viele Grüße (und eine guten Mittag)<br />
MM</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1758791</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1758791</guid><dc:creator><![CDATA[MrMilk]]></dc:creator><pubDate>Tue, 11 Aug 2009 11:33:07 GMT</pubDate></item></channel></rss>