<?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[Designfrage: Tail einer leeren Liste]]></title><description><![CDATA[<p>Hallöle,</p>
<p>Ich bastle mir gerade eine TMP-Lib. Für Listen, repräsentiert durch das list-Template gibt es eine Template-Metafunktion &quot;tail&quot;. Sollte tail bei einer leeren Liste ebenfalls eine leere Liste zurückgeben, oder sollte da eine static_assertion fliegen?</p>
<p>Grüße,<br />
Der Kellerautomat</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/305253/designfrage-tail-einer-leeren-liste</link><generator>RSS for Node</generator><lastBuildDate>Sun, 09 Aug 2026 04:59:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/305253.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 24 Jun 2012 18:32:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Designfrage: Tail einer leeren Liste on Sun, 24 Jun 2012 18:32:39 GMT]]></title><description><![CDATA[<p>Hallöle,</p>
<p>Ich bastle mir gerade eine TMP-Lib. Für Listen, repräsentiert durch das list-Template gibt es eine Template-Metafunktion &quot;tail&quot;. Sollte tail bei einer leeren Liste ebenfalls eine leere Liste zurückgeben, oder sollte da eine static_assertion fliegen?</p>
<p>Grüße,<br />
Der Kellerautomat</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2226819</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2226819</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Sun, 24 Jun 2012 18:32:39 GMT</pubDate></item><item><title><![CDATA[Reply to Designfrage: Tail einer leeren Liste on Sun, 24 Jun 2012 19:23:28 GMT]]></title><description><![CDATA[<p>static assertion.</p>
<p>Leere Listen sind ein gängiges Abbruchkriterium für die Rekursion. Wer das missachtet, hat wahrscheinlich einen Fehler gemacht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2226837</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2226837</guid><dc:creator><![CDATA[assert]]></dc:creator><pubDate>Sun, 24 Jun 2012 19:23:28 GMT</pubDate></item><item><title><![CDATA[Reply to Designfrage: Tail einer leeren Liste on Sun, 24 Jun 2012 21:24:27 GMT]]></title><description><![CDATA[<p>Hm, okay. Ist es eigentlich besser, wenn der User die Fehlermeldung vom Compiler + die Assertion bekommt, oder wenn ich dafür sorge, dass das Template im Fehlerfall gar nicht instanziert wird und der User somit nur die Assertion bekommt?</p>
<p>Sprich:</p>
<pre><code class="language-cpp">namespace detail
	{
		template &lt;typename L&gt;
		struct tail : tail&lt;typename L::type&gt;
		{};

		template &lt;typename Head, typename... Tail&gt;
		struct tail&lt;list&lt;Head, Tail...&gt;&gt; : list&lt;Tail...&gt;
		{};
	}

	template &lt;typename L&gt;
	struct tail
		: extend_if // prevent messy template error from propagating for empty lists
		&lt;
			length&lt;L&gt;,
			detail::tail&lt;L&gt;
		&gt;
	{
		static_assert(length&lt;L&gt;::value != 0, &quot;tail of empty list requested&quot;);
	};
</code></pre>
<p>Man beachte den Kommentar. extend_if ist, wenn die Bedingung (hier Länge ungleich 0) wahr ist, von typename detail::tail&lt;L&gt;::type abgeleitet, andernfalls leer. Somit bekäme der User im Fehlerfall nur den Fehler der Assertion, weil detail::tail nicht instanziert wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2226872</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2226872</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Sun, 24 Jun 2012 21:24:27 GMT</pubDate></item><item><title><![CDATA[Reply to Designfrage: Tail einer leeren Liste on Sun, 24 Jun 2012 22:42:32 GMT]]></title><description><![CDATA[<p>Auch wenn es vielleicht eleganter erscheint das Instanziieren sofort zu verhindern, ich glaube jeder User wird dir dankbar sein für eine ordentlich Lesbare Fehlermeldung anstatt des Template-Stacks, den eine TMP-Liste so hinter sich herzieht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2226882</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2226882</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sun, 24 Jun 2012 22:42:32 GMT</pubDate></item></channel></rss>