https://de.wikipedia.org/w/index.php?action=history&feed=atom&title=Substitution_failure_is_not_an_error Substitution failure is not an error - Versionsgeschichte 2025-06-25T17:12:55Z Versionsgeschichte dieser Seite in Wikipedia MediaWiki 1.45.0-wmf.6 https://de.wikipedia.org/w/index.php?title=Substitution_failure_is_not_an_error&diff=245075050&oldid=prev Invisigoth67: Steuerzeichen entfernt/ersetzt 2024-05-18T07:48:28Z <p>Steuerzeichen entfernt/ersetzt</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 18. Mai 2024, 09:48 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 41:</td> <td colspan="2" class="diff-lineno">Zeile 41:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Die Rückgabewerte der &lt;code&gt;Tester&lt;/code&gt;-Funktion sind [[Referenz (Programmierung)|Referenzen]], da in C++ bekanntlich keine Arrays zurückgegeben werden können. Der &lt;code&gt;sizeof&lt;/code&gt;-Operator gibt beim Anwenden auf eine Referenz die Größe des referenzierten Types zurück. Beim Anwenden auf einen vermeintlichen Funktionsaufruf (also auf eine Funktion inkl. Funktionsargumente) wird die Größe des Rückgabewertes angegeben. Da die Funktion in Tat und Wahrheit nie wirklich aufgerufen wird, ist keine Funktionsdefinition vonnöten. Um die Größe des Rückgabewertes angeben zu können, muss zuerst die korrekte Funktion ausgewählt werden. Wird als Template-Argument &lt;code&gt;T = Foo&lt;/code&gt; gewählt, so sind beide Überladungen korrekt, weil Foo::Type eruierbar ist. In diesem Fall wird anhand der Regeln überladener Funktionen die näherliegende ausgewählt. Da die [[variadische Funktion]] keine [[Typsicherheit]] bietet, wird die erste Funktion (die, die einen &lt;code&gt;TrueType&lt;/code&gt; zurückgibt) bevorzugt. Wird hingegen &lt;code&gt;T = int&lt;/code&gt; eingegeben, so wird die erste Funktion aus der Menge der infrage kommenden Überladungen ausgeschieden. Dies erzeugt dank SFINAE keinen Kompilierfehler. Es wird außerdem die Tatsache ausgenutzt, dass der Wert &lt;code&gt;0&lt;/code&gt; in C++ implizit in einen [[Nullwert|Nullzeiger]] konvertiert werden kann.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Die Rückgabewerte der &lt;code&gt;Tester&lt;/code&gt;-Funktion sind [[Referenz (Programmierung)|Referenzen]], da in C++ bekanntlich keine Arrays zurückgegeben werden können. Der &lt;code&gt;sizeof&lt;/code&gt;-Operator gibt beim Anwenden auf eine Referenz die Größe des referenzierten Types zurück. Beim Anwenden auf einen vermeintlichen Funktionsaufruf (also auf eine Funktion inkl. Funktionsargumente) wird die Größe des Rückgabewertes angegeben. Da die Funktion in Tat und Wahrheit nie wirklich aufgerufen wird, ist keine Funktionsdefinition vonnöten. Um die Größe des Rückgabewertes angeben zu können, muss zuerst die korrekte Funktion ausgewählt werden. Wird als Template-Argument &lt;code&gt;T = Foo&lt;/code&gt; gewählt, so sind beide Überladungen korrekt, weil Foo::Type eruierbar ist. In diesem Fall wird anhand der Regeln überladener Funktionen die näherliegende ausgewählt. Da die [[variadische Funktion]] keine [[Typsicherheit]] bietet, wird die erste Funktion (die, die einen &lt;code&gt;TrueType&lt;/code&gt; zurückgibt) bevorzugt. Wird hingegen &lt;code&gt;T = int&lt;/code&gt; eingegeben, so wird die erste Funktion aus der Menge der infrage kommenden Überladungen ausgeschieden. Dies erzeugt dank SFINAE keinen Kompilierfehler. Es wird außerdem die Tatsache ausgenutzt, dass der Wert &lt;code&gt;0&lt;/code&gt; in C++ implizit in einen [[Nullwert|Nullzeiger]] konvertiert werden kann.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Ein beliebter Einsatzort von SFINAE ist das Re­s­t­<del style="font-weight: bold; text-decoration: none;">rin­gie­ren</del> bzw. ein Spezialisieren auf Typen, die eine bestimmte Gemeinsamkeit teilen. Ein Beispiel:</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Ein beliebter Einsatzort von SFINAE ist das Re­s­t­<ins style="font-weight: bold; text-decoration: none;">ringieren</ins> bzw. ein Spezialisieren auf Typen, die eine bestimmte Gemeinsamkeit teilen. Ein Beispiel:</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;syntaxhighlight lang="cpp"&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;syntaxhighlight lang="cpp"&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>#include &lt;iostream&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>#include &lt;iostream&gt;</div></td> </tr> </table> Invisigoth67 https://de.wikipedia.org/w/index.php?title=Substitution_failure_is_not_an_error&diff=226106576&oldid=prev 62.2.105.234: /* Beispiele */An dem hatte ich zu beissen. 2022-09-12T16:33:48Z <p><span class="autocomment">Beispiele: </span>An dem hatte ich zu beissen.</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 12. September 2022, 18:33 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 39:</td> <td colspan="2" class="diff-lineno">Zeile 39:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>}</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>}</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;/syntaxhighlight&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;/syntaxhighlight&gt;</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Die Rückgabewerte der &lt;code&gt;Tester&lt;/code&gt;-Funktion sind [[Referenz (Programmierung)|Referenzen]], da in C++ bekanntlich keine Arrays zurückgegeben werden können. Der &lt;code&gt;sizeof&lt;/code&gt;-Operator gibt beim Anwenden auf eine Referenz die Größe des referenzierten Types zurück. Beim Anwenden auf einen vermeintlichen Funktionsaufruf (also auf eine Funktion inkl. Funktionsargumente) wird die Größe des Rückgabewertes angegeben. Da die Funktion in Tat und Wahrheit nie wirklich aufgerufen wird, ist keine Funktionsdefinition vonnöten. Um die Größe des Rückgabewertes angeben zu können, muss zuerst die korrekte Funktion ausgewählt werden. Wird als Template-Argument &lt;code&gt;T = Foo&lt;/code&gt; gewählt, so sind beide Überladungen korrekt. In diesem Fall wird anhand der Regeln überladener Funktionen die näherliegende ausgewählt. Da die [[variadische Funktion]] keine [[Typsicherheit]] bietet, wird die erste Funktion (die, die einen &lt;code&gt;TrueType&lt;/code&gt; zurückgibt) bevorzugt. Wird hingegen &lt;code&gt;T = int&lt;/code&gt; eingegeben, so wird die erste Funktion aus der Menge der infrage kommenden Überladungen ausgeschieden. Dies erzeugt dank SFINAE keinen Kompilierfehler. Es wird außerdem die Tatsache ausgenutzt, dass der Wert &lt;code&gt;0&lt;/code&gt; in C++ implizit in einen [[Nullwert|Nullzeiger]] konvertiert werden kann.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Die Rückgabewerte der &lt;code&gt;Tester&lt;/code&gt;-Funktion sind [[Referenz (Programmierung)|Referenzen]], da in C++ bekanntlich keine Arrays zurückgegeben werden können. Der &lt;code&gt;sizeof&lt;/code&gt;-Operator gibt beim Anwenden auf eine Referenz die Größe des referenzierten Types zurück. Beim Anwenden auf einen vermeintlichen Funktionsaufruf (also auf eine Funktion inkl. Funktionsargumente) wird die Größe des Rückgabewertes angegeben. Da die Funktion in Tat und Wahrheit nie wirklich aufgerufen wird, ist keine Funktionsdefinition vonnöten. Um die Größe des Rückgabewertes angeben zu können, muss zuerst die korrekte Funktion ausgewählt werden. Wird als Template-Argument &lt;code&gt;T = Foo&lt;/code&gt; gewählt, so sind beide Überladungen korrekt<ins style="font-weight: bold; text-decoration: none;">, weil Foo::Type eruierbar ist</ins>. In diesem Fall wird anhand der Regeln überladener Funktionen die näherliegende ausgewählt. Da die [[variadische Funktion]] keine [[Typsicherheit]] bietet, wird die erste Funktion (die, die einen &lt;code&gt;TrueType&lt;/code&gt; zurückgibt) bevorzugt. Wird hingegen &lt;code&gt;T = int&lt;/code&gt; eingegeben, so wird die erste Funktion aus der Menge der infrage kommenden Überladungen ausgeschieden. Dies erzeugt dank SFINAE keinen Kompilierfehler. Es wird außerdem die Tatsache ausgenutzt, dass der Wert &lt;code&gt;0&lt;/code&gt; in C++ implizit in einen [[Nullwert|Nullzeiger]] konvertiert werden kann.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Ein beliebter Einsatzort von SFINAE ist das Re­s­t­rin­gie­ren bzw. ein Spezialisieren auf Typen, die eine bestimmte Gemeinsamkeit teilen. Ein Beispiel:</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Ein beliebter Einsatzort von SFINAE ist das Re­s­t­rin­gie­ren bzw. ein Spezialisieren auf Typen, die eine bestimmte Gemeinsamkeit teilen. Ein Beispiel:</div></td> </tr> </table> 62.2.105.234 https://de.wikipedia.org/w/index.php?title=Substitution_failure_is_not_an_error&diff=211165713&oldid=prev Aka: /* Weblinks */ https 2021-04-21T17:02:47Z <p><span class="autocomment">Weblinks: </span> https</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 21. April 2021, 19:02 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 78:</td> <td colspan="2" class="diff-lineno">Zeile 78:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Weblinks ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Weblinks ==</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>* [<del style="font-weight: bold; text-decoration: none;">http</del>://en.cppreference.com/w/cpp/language/sfinae SFINAE – cppreference.com]</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>* [<ins style="font-weight: bold; text-decoration: none;">https</ins>://en.cppreference.com/w/cpp/language/sfinae SFINAE – cppreference.com]</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>[[Kategorie:C++]]</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>[[Kategorie:C++]]</div></td> </tr> </table> Aka https://de.wikipedia.org/w/index.php?title=Substitution_failure_is_not_an_error&diff=151535301&oldid=prev 64.214.147.58: Der überarbeitete Satz war eindeutig falsch (int kann nicht implizit in Zeiger konvertiert werden, mit Ausnahme von 0 für Nullpointer, C++14 Standard 4.10.1) 2016-02-15T14:48:51Z <p>Der überarbeitete Satz war eindeutig falsch (int kann nicht implizit in Zeiger konvertiert werden, mit Ausnahme von 0 für Nullpointer, C++14 Standard 4.10.1)</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 15. Februar 2016, 16:48 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 39:</td> <td colspan="2" class="diff-lineno">Zeile 39:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>}</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>}</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;/syntaxhighlight&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;/syntaxhighlight&gt;</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Die Rückgabewerte der &lt;code&gt;Tester&lt;/code&gt;-Funktion sind [[Referenz (Programmierung)|Referenzen]], da in C++ bekanntlich keine Arrays zurückgegeben werden können. Der &lt;code&gt;sizeof&lt;/code&gt;-Operator gibt beim Anwenden auf eine Referenz die Größe des referenzierten Types zurück. Beim Anwenden auf einen vermeintlichen Funktionsaufruf (also auf eine Funktion inkl. Funktionsargumente) wird die Größe des Rückgabewertes angegeben. Da die Funktion in Tat und Wahrheit nie wirklich aufgerufen wird, ist keine Funktionsdefinition vonnöten. Um die Größe des Rückgabewertes angeben zu können, muss zuerst die korrekte Funktion ausgewählt werden. Wird als Template-Argument &lt;code&gt;T = Foo&lt;/code&gt; gewählt, so sind beide Überladungen korrekt. In diesem Fall wird anhand der Regeln überladener Funktionen die näherliegende ausgewählt. Da die [[variadische Funktion]] keine [[Typsicherheit]] bietet, wird die erste Funktion (die, die einen &lt;code&gt;TrueType&lt;/code&gt; zurückgibt) bevorzugt. Wird hingegen &lt;code&gt;T = int&lt;/code&gt; eingegeben, so wird die erste Funktion aus der Menge der infrage kommenden Überladungen ausgeschieden. Dies erzeugt dank SFINAE keinen Kompilierfehler. Es wird außerdem die Tatsache ausgenutzt, dass &lt;code&gt;<del style="font-weight: bold; text-decoration: none;">int</del>&lt;/code&gt;<del style="font-weight: bold; text-decoration: none;">s</del> in C++ implizit in [[<del style="font-weight: bold; text-decoration: none;">Zeiger (Informatik)</del>|<del style="font-weight: bold; text-decoration: none;">Zeiger</del>]] konvertiert werden.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Die Rückgabewerte der &lt;code&gt;Tester&lt;/code&gt;-Funktion sind [[Referenz (Programmierung)|Referenzen]], da in C++ bekanntlich keine Arrays zurückgegeben werden können. Der &lt;code&gt;sizeof&lt;/code&gt;-Operator gibt beim Anwenden auf eine Referenz die Größe des referenzierten Types zurück. Beim Anwenden auf einen vermeintlichen Funktionsaufruf (also auf eine Funktion inkl. Funktionsargumente) wird die Größe des Rückgabewertes angegeben. Da die Funktion in Tat und Wahrheit nie wirklich aufgerufen wird, ist keine Funktionsdefinition vonnöten. Um die Größe des Rückgabewertes angeben zu können, muss zuerst die korrekte Funktion ausgewählt werden. Wird als Template-Argument &lt;code&gt;T = Foo&lt;/code&gt; gewählt, so sind beide Überladungen korrekt. In diesem Fall wird anhand der Regeln überladener Funktionen die näherliegende ausgewählt. Da die [[variadische Funktion]] keine [[Typsicherheit]] bietet, wird die erste Funktion (die, die einen &lt;code&gt;TrueType&lt;/code&gt; zurückgibt) bevorzugt. Wird hingegen &lt;code&gt;T = int&lt;/code&gt; eingegeben, so wird die erste Funktion aus der Menge der infrage kommenden Überladungen ausgeschieden. Dies erzeugt dank SFINAE keinen Kompilierfehler. Es wird außerdem die Tatsache ausgenutzt, dass<ins style="font-weight: bold; text-decoration: none;"> der Wert</ins> &lt;code&gt;<ins style="font-weight: bold; text-decoration: none;">0</ins>&lt;/code&gt; in C++ implizit in<ins style="font-weight: bold; text-decoration: none;"> einen</ins> [[<ins style="font-weight: bold; text-decoration: none;">Nullwert</ins>|<ins style="font-weight: bold; text-decoration: none;">Nullzeiger</ins>]] konvertiert werden<ins style="font-weight: bold; text-decoration: none;"> kann</ins>.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Ein beliebter Einsatzort von SFINAE ist das Re­s­t­rin­gie­ren bzw. ein Spezialisieren auf Typen, die eine bestimmte Gemeinsamkeit teilen. Ein Beispiel:</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Ein beliebter Einsatzort von SFINAE ist das Re­s­t­rin­gie­ren bzw. ein Spezialisieren auf Typen, die eine bestimmte Gemeinsamkeit teilen. Ein Beispiel:</div></td> </tr> </table> 64.214.147.58 https://de.wikipedia.org/w/index.php?title=Substitution_failure_is_not_an_error&diff=144922645&oldid=prev EricSchreyer: Lesbarkeit 2015-08-11T10:15:52Z <p>Lesbarkeit</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 11. August 2015, 12:15 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 1:</td> <td colspan="2" class="diff-lineno">Zeile 1:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>'''Substitution failure is not an error''' ('''SFINAE''') ist eine Programmiertechnik in der Programmiersprache [[C++]]. Dabei wird die Tatsache ausgenutzt, dass eine fehlgeschlagene Substitution von [[Template (Programmierung)|Template]]-Argumenten keinen Kompilierfehler erzeugt.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>'''Substitution failure is not an error''' ('''SFINAE''') ist eine Programmiertechnik in der Programmiersprache [[C++]]. Dabei wird die Tatsache ausgenutzt, dass eine fehlgeschlagene Substitution von [[Template (Programmierung)|Template]]-Argumenten keinen Kompilierfehler erzeugt.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Ist beispielsweise eine [[Funktion (Programmierung)|Funktion]] mehrfach [[überladen]] und sind gewisse Kandidaten das Ergebnis der Instanziierung eines Funktionstemplates mit möglicherweise deduzierten Template-Argumenten, so wird – sofern die Substitution der Template-Argumente fehlgeschlagen ist – die Überladung aus der Menge der Kandidaten entfernt, ohne dass der Kompiliervorgang mit einem Kompilierfehler abgebrochen wird. Sind die <del style="font-weight: bold; text-decoration: none;">schlussendlich</del> verbliebenen Kandidaten mehrdeutig, beispielsweise weil sie dieselbe [[Signatur (Programmierung)|Signatur]] haben und sich nur durch den Rückgabewert unterscheiden, oder sind<del style="font-weight: bold; text-decoration: none;"> schlussendlich</del> keine Kandidaten für den Funktionsaufruf mehr vorhanden, so wird dennoch wie üblich ein Kompilierfehler erzeugt.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Ist beispielsweise eine [[Funktion (Programmierung)|Funktion]] mehrfach [[überladen]] und sind gewisse Kandidaten das Ergebnis der Instanziierung eines Funktionstemplates mit möglicherweise deduzierten Template-Argumenten, so wird – sofern die Substitution der Template-Argumente fehlgeschlagen ist – die Überladung aus der Menge der Kandidaten entfernt, ohne dass der Kompiliervorgang mit einem Kompilierfehler abgebrochen wird. Sind die <ins style="font-weight: bold; text-decoration: none;">schließlich</ins> verbliebenen Kandidaten mehrdeutig, beispielsweise weil sie dieselbe [[Signatur (Programmierung)|Signatur]] haben und sich nur durch den Rückgabewert unterscheiden, oder sind keine Kandidaten für den Funktionsaufruf mehr vorhanden, so wird dennoch wie üblich ein Kompilierfehler erzeugt.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Beispiele ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Beispiele ==</div></td> </tr> </table> EricSchreyer https://de.wikipedia.org/w/index.php?title=Substitution_failure_is_not_an_error&diff=134680995&oldid=prev 195.83.139.7: Englischsprachinge duch deutschsprachigen Begriff ersetzt 2014-10-07T13:29:26Z <p>Englischsprachinge duch deutschsprachigen Begriff ersetzt</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 7. Oktober 2014, 15:29 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 1:</td> <td colspan="2" class="diff-lineno">Zeile 1:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>'''Substitution failure is not an error''' ('''SFINAE''') ist eine Programmiertechnik in der Programmiersprache [[C++]]. Dabei wird die Tatsache ausgenutzt, dass eine fehlgeschlagene Substitution von [[Template (Programmierung)|Template]]-Argumenten keinen Kompilierfehler erzeugt.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>'''Substitution failure is not an error''' ('''SFINAE''') ist eine Programmiertechnik in der Programmiersprache [[C++]]. Dabei wird die Tatsache ausgenutzt, dass eine fehlgeschlagene Substitution von [[Template (Programmierung)|Template]]-Argumenten keinen Kompilierfehler erzeugt.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Ist beispielsweise eine [[Funktion (Programmierung)|Funktion]] mehrfach [[überladen]] und sind gewisse Kandidaten das Ergebnis der Instanziierung eines Funktionstemplates mit möglicherweise deduzierten Template-Argumenten, so wird – sofern die Substitution der Template-Argumente fehlgeschlagen ist – die Überladung aus der Menge der Kandidaten entfernt, ohne dass der Kompiliervorgang mit einem Kompilierfehler abgebrochen wird. Sind die schlussendlich verbliebenen Kandidaten <del style="font-weight: bold; text-decoration: none;">ambiguos</del>, beispielsweise weil sie dieselbe [[Signatur (Programmierung)|Signatur]] haben und sich nur durch den Rückgabewert unterscheiden, oder sind schlussendlich keine Kandidaten für den Funktionsaufruf mehr vorhanden, so wird dennoch wie üblich ein Kompilierfehler erzeugt.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Ist beispielsweise eine [[Funktion (Programmierung)|Funktion]] mehrfach [[überladen]] und sind gewisse Kandidaten das Ergebnis der Instanziierung eines Funktionstemplates mit möglicherweise deduzierten Template-Argumenten, so wird – sofern die Substitution der Template-Argumente fehlgeschlagen ist – die Überladung aus der Menge der Kandidaten entfernt, ohne dass der Kompiliervorgang mit einem Kompilierfehler abgebrochen wird. Sind die schlussendlich verbliebenen Kandidaten <ins style="font-weight: bold; text-decoration: none;">mehrdeutig</ins>, beispielsweise weil sie dieselbe [[Signatur (Programmierung)|Signatur]] haben und sich nur durch den Rückgabewert unterscheiden, oder sind schlussendlich keine Kandidaten für den Funktionsaufruf mehr vorhanden, so wird dennoch wie üblich ein Kompilierfehler erzeugt.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Beispiele ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Beispiele ==</div></td> </tr> </table> 195.83.139.7 https://de.wikipedia.org/w/index.php?title=Substitution_failure_is_not_an_error&diff=132458293&oldid=prev Aka: Tippfehler entfernt 2014-07-24T17:12:33Z <p>Tippfehler entfernt</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 24. Juli 2014, 19:12 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 18:</td> <td colspan="2" class="diff-lineno">Zeile 18:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> template&lt;typename U&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> template&lt;typename U&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> static TrueType&amp; Tester(typename U::Type*);</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> static TrueType&amp; Tester(typename U::Type*);</div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div> </div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> template&lt;typename&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> template&lt;typename&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> static FalseType&amp; Tester(...);</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> static FalseType&amp; Tester(...);</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Zeile 39:</td> <td colspan="2" class="diff-lineno">Zeile 39:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>}</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>}</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;/syntaxhighlight&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;/syntaxhighlight&gt;</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Die Rückgabewerte der &lt;code&gt;Tester&lt;/code&gt;-Funktion sind [[Referenz (Programmierung)|Referenzen]], da in C++ bekanntlich keine Arrays zurückgegeben werden können. Der &lt;code&gt;sizeof&lt;/code&gt;-Operator gibt beim Anwenden auf eine Referenz die Größe des referenzierten Types zurück. Beim Anwenden auf einen vermeintlichen Funktionsaufruf (also auf eine Funktion inkl. Funktionsargumente) wird die Größe des Rückgabewertes angegeben. Da die Funktion in Tat und Wahrheit nie wirklich aufgerufen wird, ist keine Funktionsdefinition <del style="font-weight: bold; text-decoration: none;">von Nöten</del>. Um die Größe des Rückgabewertes angeben zu können, muss zuerst die korrekte Funktion ausgewählt werden. Wird als Template-Argument &lt;code&gt;T = Foo&lt;/code&gt; gewählt, so sind beide Überladungen korrekt. In diesem Fall wird anhand der Regeln überladener Funktionen die näherliegende ausgewählt. Da die [[variadische Funktion]] keine [[Typsicherheit]] bietet, wird die erste Funktion (die, die einen &lt;code&gt;TrueType&lt;/code&gt; zurückgibt) bevorzugt. Wird hingegen &lt;code&gt;T = int&lt;/code&gt; eingegeben, so wird die erste Funktion aus der Menge der infrage kommenden Überladungen ausgeschieden. Dies erzeugt dank SFINAE keinen Kompilierfehler. Es wird außerdem die Tatsache ausgenutzt, dass &lt;code&gt;int&lt;/code&gt;s in C++ implizit in [[Zeiger (Informatik)|Zeiger]] konvertiert werden.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Die Rückgabewerte der &lt;code&gt;Tester&lt;/code&gt;-Funktion sind [[Referenz (Programmierung)|Referenzen]], da in C++ bekanntlich keine Arrays zurückgegeben werden können. Der &lt;code&gt;sizeof&lt;/code&gt;-Operator gibt beim Anwenden auf eine Referenz die Größe des referenzierten Types zurück. Beim Anwenden auf einen vermeintlichen Funktionsaufruf (also auf eine Funktion inkl. Funktionsargumente) wird die Größe des Rückgabewertes angegeben. Da die Funktion in Tat und Wahrheit nie wirklich aufgerufen wird, ist keine Funktionsdefinition <ins style="font-weight: bold; text-decoration: none;">vonnöten</ins>. Um die Größe des Rückgabewertes angeben zu können, muss zuerst die korrekte Funktion ausgewählt werden. Wird als Template-Argument &lt;code&gt;T = Foo&lt;/code&gt; gewählt, so sind beide Überladungen korrekt. In diesem Fall wird anhand der Regeln überladener Funktionen die näherliegende ausgewählt. Da die [[variadische Funktion]] keine [[Typsicherheit]] bietet, wird die erste Funktion (die, die einen &lt;code&gt;TrueType&lt;/code&gt; zurückgibt) bevorzugt. Wird hingegen &lt;code&gt;T = int&lt;/code&gt; eingegeben, so wird die erste Funktion aus der Menge der infrage kommenden Überladungen ausgeschieden. Dies erzeugt dank SFINAE keinen Kompilierfehler. Es wird außerdem die Tatsache ausgenutzt, dass &lt;code&gt;int&lt;/code&gt;s in C++ implizit in [[Zeiger (Informatik)|Zeiger]] konvertiert werden.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Ein beliebter Einsatzort von SFINAE ist das Re­s­t­rin­gie­ren bzw. ein Spezialisieren auf Typen, die eine bestimmte Gemeinsamkeit teilen. Ein Beispiel:</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Ein beliebter Einsatzort von SFINAE ist das Re­s­t­rin­gie­ren bzw. ein Spezialisieren auf Typen, die eine bestimmte Gemeinsamkeit teilen. Ein Beispiel:</div></td> </tr> </table> Aka https://de.wikipedia.org/w/index.php?title=Substitution_failure_is_not_an_error&diff=131737714&oldid=prev Wikinger08: /* Weblinks */ 2014-06-30T09:43:06Z <p><span class="autocomment">Weblinks</span></p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 30. Juni 2014, 11:43 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 78:</td> <td colspan="2" class="diff-lineno">Zeile 78:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Weblinks ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Weblinks ==</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>* [http://en.cppreference.com/w/cpp/language/sfinae SFINAE <del style="font-weight: bold; text-decoration: none;">-</del> cppreference.com]</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>* [http://en.cppreference.com/w/cpp/language/sfinae SFINAE <ins style="font-weight: bold; text-decoration: none;">–</ins> cppreference.com]</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>[[Kategorie:C++]]</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>[[Kategorie:C++]]</div></td> </tr> </table> Wikinger08 https://de.wikipedia.org/w/index.php?title=Substitution_failure_is_not_an_error&diff=131737674&oldid=prev Wikinger08: /* Beispiele */ Typo; Interpunktion; Grammatik 2014-06-30T09:41:58Z <p><span class="autocomment">Beispiele: </span> Typo; Interpunktion; Grammatik</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 30. Juni 2014, 11:41 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 4:</td> <td colspan="2" class="diff-lineno">Zeile 4:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Beispiele ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Beispiele ==</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Als Standardbeispiel sei ein Konstrukt genannt, <del style="font-weight: bold; text-decoration: none;">welches</del> von einem Typen &lt;code&gt;T&lt;/code&gt; bestimmt, ob &lt;code&gt;T::Type&lt;/code&gt; ebenfalls ein Typ ist.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Als Standardbeispiel sei ein Konstrukt genannt, <ins style="font-weight: bold; text-decoration: none;">das</ins> von einem Typen &lt;code&gt;T&lt;/code&gt; bestimmt, ob &lt;code&gt;T::Type&lt;/code&gt; ebenfalls ein Typ ist.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;syntaxhighlight lang="cpp"&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;syntaxhighlight lang="cpp"&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>#include &lt;iostream&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>#include &lt;iostream&gt;</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Zeile 11:</td> <td colspan="2" class="diff-lineno">Zeile 11:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>class HasType</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>class HasType</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>{</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>{</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div> // Es werden zwei Typen benötigt, die unterschiedlich <del style="font-weight: bold; text-decoration: none;">gross</del> sind, sodass man sie mit sizeof differenzieren kann:</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div> // Es werden zwei Typen benötigt, die unterschiedlich <ins style="font-weight: bold; text-decoration: none;">groß</ins> sind, sodass man sie mit sizeof differenzieren kann:</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> typedef char FalseType[1];</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> typedef char FalseType[1];</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> typedef char TrueType[2];</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> typedef char TrueType[2];</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Zeile 23:</td> <td colspan="2" class="diff-lineno">Zeile 23:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>public:</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>public:</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div> // Die gesammelte Information wird mit einem einfachen booleschen Wert nach <del style="font-weight: bold; text-decoration: none;">aussen</del> gegeben:</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div> // Die gesammelte Information wird mit einem einfachen booleschen Wert nach <ins style="font-weight: bold; text-decoration: none;">außen</ins> gegeben:</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> static const bool Value = sizeof(Tester&lt;T&gt;(0)) == sizeof(TrueType);</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> static const bool Value = sizeof(Tester&lt;T&gt;(0)) == sizeof(TrueType);</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>};</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>};</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Zeile 39:</td> <td colspan="2" class="diff-lineno">Zeile 39:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>}</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>}</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;/syntaxhighlight&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;/syntaxhighlight&gt;</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Die Rückgabewerte der &lt;code&gt;Tester&lt;/code&gt;-Funktion sind [[Referenz (Programmierung)|Referenzen]], da in C++ bekanntlich keine Arrays zurückgegeben werden können. Der &lt;code&gt;sizeof&lt;/code&gt;-Operator gibt beim Anwenden auf eine Referenz die Größe des referenzierten Types zurück. Beim Anwenden auf einen vermeintlichen Funktionsaufruf (also auf eine Funktion inkl. Funktionsargumente) wird die Größe des Rückgabewertes angegeben. Da die Funktion in Tat und Wahrheit nie wirklich aufgerufen wird, ist keine Funktionsdefinition von Nöten. Um die Größe des Rückgabewertes angeben zu können, muss zuerst die korrekte Funktion ausgewählt werden. Wird als Template-Argument &lt;code&gt;T = Foo&lt;/code&gt; gewählt, so sind beide Überladungen korrekt. In diesem Fall wird anhand der Regeln überladener Funktionen die näherliegende ausgewählt. Da die [[variadische Funktion]] keine [[Typsicherheit]] bietet, wird die erste Funktion (die die einen &lt;code&gt;TrueType&lt;/code&gt; zurückgibt) bevorzugt. Wird hingegen &lt;code&gt;T = int&lt;/code&gt; eingegeben, so wird die erste Funktion aus der Menge der infrage kommenden Überladungen ausgeschieden. Dies erzeugt dank SFINAE keinen Kompilierfehler. Es wird <del style="font-weight: bold; text-decoration: none;">ausserdem</del> die Tatsache ausgenutzt, dass &lt;code&gt;int&lt;/code&gt;s in C++ implizit in [[Zeiger (Informatik)|Zeiger]] konvertiert werden.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Die Rückgabewerte der &lt;code&gt;Tester&lt;/code&gt;-Funktion sind [[Referenz (Programmierung)|Referenzen]], da in C++ bekanntlich keine Arrays zurückgegeben werden können. Der &lt;code&gt;sizeof&lt;/code&gt;-Operator gibt beim Anwenden auf eine Referenz die Größe des referenzierten Types zurück. Beim Anwenden auf einen vermeintlichen Funktionsaufruf (also auf eine Funktion inkl. Funktionsargumente) wird die Größe des Rückgabewertes angegeben. Da die Funktion in Tat und Wahrheit nie wirklich aufgerufen wird, ist keine Funktionsdefinition von Nöten. Um die Größe des Rückgabewertes angeben zu können, muss zuerst die korrekte Funktion ausgewählt werden. Wird als Template-Argument &lt;code&gt;T = Foo&lt;/code&gt; gewählt, so sind beide Überladungen korrekt. In diesem Fall wird anhand der Regeln überladener Funktionen die näherliegende ausgewählt. Da die [[variadische Funktion]] keine [[Typsicherheit]] bietet, wird die erste Funktion (die<ins style="font-weight: bold; text-decoration: none;">,</ins> die einen &lt;code&gt;TrueType&lt;/code&gt; zurückgibt) bevorzugt. Wird hingegen &lt;code&gt;T = int&lt;/code&gt; eingegeben, so wird die erste Funktion aus der Menge der infrage kommenden Überladungen ausgeschieden. Dies erzeugt dank SFINAE keinen Kompilierfehler. Es wird <ins style="font-weight: bold; text-decoration: none;">außerdem</ins> die Tatsache ausgenutzt, dass &lt;code&gt;int&lt;/code&gt;s in C++ implizit in [[Zeiger (Informatik)|Zeiger]] konvertiert werden.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Ein beliebter Einsatzort von SFINAE ist das Re­s­t­rin­gie­ren bzw. ein Spezialisieren auf Typen, die eine bestimmte Gemeinsamkeit teilen. Ein Beispiel:</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Ein beliebter Einsatzort von SFINAE ist das Re­s­t­rin­gie­ren bzw. ein Spezialisieren auf Typen, die eine bestimmte Gemeinsamkeit teilen. Ein Beispiel:</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Zeile 73:</td> <td colspan="2" class="diff-lineno">Zeile 73:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>}</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>}</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;/syntaxhighlight&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;/syntaxhighlight&gt;</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Wegen <del style="font-weight: bold; text-decoration: none;">den</del> Default-Template-<del style="font-weight: bold; text-decoration: none;">Argumenten</del> ist das Programm nicht in C++03 lauffähig sondern erst in C++11. Die Elemente &lt;code&gt;std::enable_if&lt;/code&gt; etc. hingegen sind auch in C++03 implementierbar.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Wegen <ins style="font-weight: bold; text-decoration: none;">der</ins> Default-Template-<ins style="font-weight: bold; text-decoration: none;">Argumente</ins> ist das Programm nicht in C++03 lauffähig<ins style="font-weight: bold; text-decoration: none;">,</ins> sondern erst in C++11. Die Elemente &lt;code&gt;std::enable_if&lt;/code&gt; etc. hingegen sind auch in C++03 implementierbar.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Dank SFINAE spart man sich hier das separate Spezialisieren des Funktionstemplates auf alle einzelnen [[Integer (Datentyp)|integralen]] bzw. [[Fließkommazahl|Fließkommatypen]].</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Dank SFINAE spart man sich hier das separate Spezialisieren des Funktionstemplates auf alle einzelnen [[Integer (Datentyp)|integralen]] bzw. [[Fließkommazahl|Fließkommatypen]].</div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Weblinks ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Weblinks ==</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* [http://en.cppreference.com/w/cpp/language/sfinae SFINAE - cppreference.com]</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* [http://en.cppreference.com/w/cpp/language/sfinae SFINAE - cppreference.com]</div></td> </tr> </table> Wikinger08 https://de.wikipedia.org/w/index.php?title=Substitution_failure_is_not_an_error&diff=131633604&oldid=prev Fytcha: Asfdlol verschob die Seite Benutzer:Asfdlol/Substitution failure is not an error nach Substitution failure is not an error: Artikel fertig gestellt 2014-06-26T11:59:39Z <p>Asfdlol verschob die Seite <a href="/w/index.php?title=Benutzer:Asfdlol/Substitution_failure_is_not_an_error&amp;action=edit&amp;redlink=1" class="new" title="Benutzer:Asfdlol/Substitution failure is not an error (Seite nicht vorhanden)">Benutzer:Asfdlol/Substitution failure is not an error</a> nach <a href="/wiki/Substitution_failure_is_not_an_error" title="Substitution failure is not an error">Substitution failure is not an error</a>: Artikel fertig gestellt</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <tr class="diff-title" lang="de"> <td colspan="1" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="1" style="background-color: #fff; color: #202122; text-align: center;">Version vom 26. Juni 2014, 13:59 Uhr</td> </tr><tr><td colspan="2" class="diff-notice" lang="de"><div class="mw-diff-empty">(kein Unterschied)</div> </td></tr></table> Fytcha