<?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[array.size() als Template-Parameter]]></title><description><![CDATA[<p>Hallo, ich habe folgenden Code:</p>
<pre><code>#include &lt;bitset&gt;
#include &lt;array&gt;
#include &lt;iostream&gt;

template&lt;size_t N&gt;
void func(const std::array&lt;bool,N&gt;&amp; arr)
{
  std::bitset&lt;arr.size()&gt; bits(0);
  for(size_t i=0; i&lt;N; ++i)
    bits[i] = arr[i];
  std::cout &lt;&lt; bits &lt;&lt; std::endl;
}

int main()
{
  std::array&lt;bool,15&gt; myarray = {true, false, false, false, true, true, false};
  func(myarray);
}
</code></pre>
<p>Dieser kompiliert problemlos mit dem GNU Compiler. Der Microsoft Compiler in Visual Studio 2015 und Clang++ beschweren sich jedoch beide über Zeile 8. Das Template-Argument arr.size() sei keine Compiletime-constant-expression (constexpr).</p>
<p>Hier steht jedoch das Gegenteil:<br />
<a href="http://www.cplusplus.com/reference/array/array/size/" rel="nofollow">http://www.cplusplus.com/reference/array/array/size/</a></p>
<p>Wer hat Recht?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/337783/array-size-als-template-parameter</link><generator>RSS for Node</generator><lastBuildDate>Fri, 17 Apr 2026 19:43:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/337783.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 28 Apr 2016 09:37:20 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to array.size() als Template-Parameter on Thu, 28 Apr 2016 09:37:20 GMT]]></title><description><![CDATA[<p>Hallo, ich habe folgenden Code:</p>
<pre><code>#include &lt;bitset&gt;
#include &lt;array&gt;
#include &lt;iostream&gt;

template&lt;size_t N&gt;
void func(const std::array&lt;bool,N&gt;&amp; arr)
{
  std::bitset&lt;arr.size()&gt; bits(0);
  for(size_t i=0; i&lt;N; ++i)
    bits[i] = arr[i];
  std::cout &lt;&lt; bits &lt;&lt; std::endl;
}

int main()
{
  std::array&lt;bool,15&gt; myarray = {true, false, false, false, true, true, false};
  func(myarray);
}
</code></pre>
<p>Dieser kompiliert problemlos mit dem GNU Compiler. Der Microsoft Compiler in Visual Studio 2015 und Clang++ beschweren sich jedoch beide über Zeile 8. Das Template-Argument arr.size() sei keine Compiletime-constant-expression (constexpr).</p>
<p>Hier steht jedoch das Gegenteil:<br />
<a href="http://www.cplusplus.com/reference/array/array/size/" rel="nofollow">http://www.cplusplus.com/reference/array/array/size/</a></p>
<p>Wer hat Recht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2494398</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2494398</guid><dc:creator><![CDATA[Mr Train]]></dc:creator><pubDate>Thu, 28 Apr 2016 09:37:20 GMT</pubDate></item><item><title><![CDATA[Reply to array.size() als Template-Parameter on Thu, 28 Apr 2016 10:28:33 GMT]]></title><description><![CDATA[<p>Beklagen hilft nicht <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="😉"
    /> Ein workaround schon eher:</p>
<pre><code>#include &lt;bitset&gt;
#include &lt;array&gt;
#include &lt;iostream&gt;

template &lt; class T &gt;
struct size_from_array;

template &lt; typename T, std::size_t N &gt;
struct size_from_array&lt; std::array&lt;T,N&gt; &gt;
{
    enum { size = N };
};

template &lt; std::size_t N &gt;
void func(const std::array&lt;bool,N&gt;&amp; arr)
{
  std::bitset&lt; size_from_array&lt; std::array&lt;bool,N&gt; &gt;::size &gt; bits(0);
  for(size_t i=0; i&lt;N; ++i)
    bits[i] = arr[i];
  std::cout &lt;&lt; bits &lt;&lt; std::endl;
}

int main()
{
  std::array&lt;bool,15&gt; myarray = {true, false, false, false, true, true, false};
  func(myarray);
}
</code></pre>
<p>mfg Torsten</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2494403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2494403</guid><dc:creator><![CDATA[Torsten Robitzki]]></dc:creator><pubDate>Thu, 28 Apr 2016 10:28:33 GMT</pubDate></item><item><title><![CDATA[Reply to array.size() als Template-Parameter on Thu, 28 Apr 2016 10:43:54 GMT]]></title><description><![CDATA[<p>Eine ähnliche Frage habe ich schonmal beantwortet: <a href="http://stackoverflow.com/a/36432725/3647361" rel="nofollow">http://stackoverflow.com/a/36432725/3647361</a></p>
<p>Hier hat GCC Recht, da <code>size</code> als <code>constexpr</code> deklariert ist und einfach eine Konstante zurückgibt - ob das Objekt Argument überhaupt <code>const</code> ist, ist irrelevant, da es innerhalb der Funktion nicht verwendet wird.<br />
Das hängt aber natürlich davon ab, wie aktuell deine Implementierungen alle sind: <a href="http://melpon.org/wandbox/permlink/sMXpIOiaR5r8pmoC" rel="nofollow">Clang trunk kompiliert deinen Code</a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2494406</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2494406</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Thu, 28 Apr 2016 10:43:54 GMT</pubDate></item><item><title><![CDATA[Reply to array.size() als Template-Parameter on Thu, 28 Apr 2016 10:50:04 GMT]]></title><description><![CDATA[<p>Hallo, kreativer Workaround. Mich würde aber trotzdem interessieren, ob der Fehler tatsächlich beim Compiler oder bei mir liegt. Ich bin vorsichtig geworden Compiler zu beschuldigen, da sie erfahrungsgemäß tatsächlich fast immer richtig liegen. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2494408</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2494408</guid><dc:creator><![CDATA[Mr Train]]></dc:creator><pubDate>Thu, 28 Apr 2016 10:50:04 GMT</pubDate></item><item><title><![CDATA[Reply to array.size() als Template-Parameter on Thu, 28 Apr 2016 10:58:38 GMT]]></title><description><![CDATA[<p>Naja, wenn wir mal davon ausgehen, dass die angegebene Referenz korrekt ist, dann kommt es drauf an, ob das Beispiel C++11 oder C++14 ist. Für C++14 wäre Dein code dann korrekt. Nur, was nützt es Dir, wenn der Code korrekt ist? <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2494410</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2494410</guid><dc:creator><![CDATA[Torsten Robitzki]]></dc:creator><pubDate>Thu, 28 Apr 2016 10:58:38 GMT</pubDate></item><item><title><![CDATA[Reply to array.size() als Template-Parameter on Thu, 28 Apr 2016 10:59:40 GMT]]></title><description><![CDATA[<p>@Arcoth: Danke für die klare Einschätzung. Hier läuft noch Clang 3.7.1, da ist der Bug wohl noch drin, der in 3.9.0 gefixt ist. Wieder ein Grund mehr auf den Microsoft Compiler einzuprügeln <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="😉"
    /> (Bitte nicht zu ernst nehmen)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2494411</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2494411</guid><dc:creator><![CDATA[Mr Train]]></dc:creator><pubDate>Thu, 28 Apr 2016 10:59:40 GMT</pubDate></item><item><title><![CDATA[Reply to array.size() als Template-Parameter on Thu, 28 Apr 2016 10:59:01 GMT]]></title><description><![CDATA[<p>Torsten Robitzki schrieb:</p>
<blockquote>
<p>Beklagen hilft nicht <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="😉"
    /> Ein workaround schon eher:</p>
<pre><code>#include &lt;bitset&gt;
#include &lt;array&gt;
#include &lt;iostream&gt;

template &lt; class T &gt;
struct size_from_array;

template &lt; typename T, std::size_t N &gt;
struct size_from_array&lt; std::array&lt;T,N&gt; &gt;
{
    enum { size = N };
};

template &lt; std::size_t N &gt;
void func(const std::array&lt;bool,N&gt;&amp; arr)
{
  std::bitset&lt; size_from_array&lt; std::array&lt;bool,N&gt; &gt;::size &gt; bits(0);
  for(size_t i=0; i&lt;N; ++i)
    bits[i] = arr[i];
  std::cout &lt;&lt; bits &lt;&lt; std::endl;
}

int main()
{
  std::array&lt;bool,15&gt; myarray = {true, false, false, false, true, true, false};
  func(myarray);
}
</code></pre>
<p>mfg Torsten</p>
</blockquote>
<p>Ja..... oder man benutzt einfach <code>N</code> . <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2494412</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2494412</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Thu, 28 Apr 2016 10:59:01 GMT</pubDate></item><item><title><![CDATA[Reply to array.size() als Template-Parameter on Thu, 28 Apr 2016 11:02:29 GMT]]></title><description><![CDATA[<p>Torsten Robitzki schrieb:</p>
<blockquote>
<p>Naja, wenn wir mal davon ausgehen, dass die angegebene Referenz korrekt ist, dann kommt es drauf an, ob das Beispiel C++11 oder C++14 ist. Für C++14 wäre Dein code dann korrekt.</p>
</blockquote>
<p>Warum wäre der Code für C++11 nicht korrekt? Ich habe mit -std=c++11 kompiliert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2494414</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2494414</guid><dc:creator><![CDATA[Mr Train]]></dc:creator><pubDate>Thu, 28 Apr 2016 11:02:29 GMT</pubDate></item><item><title><![CDATA[Reply to array.size() als Template-Parameter on Thu, 28 Apr 2016 11:02:30 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<p>Ja..... oder man benutzt einfach <code>N</code> . <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
</blockquote>
<p>Ähh, .... ja! <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="😉"
    /> Zumindest im gg. Beispiel.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2494415</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2494415</guid><dc:creator><![CDATA[Torsten Robitzki]]></dc:creator><pubDate>Thu, 28 Apr 2016 11:02:30 GMT</pubDate></item><item><title><![CDATA[Reply to array.size() als Template-Parameter on Thu, 28 Apr 2016 11:09:46 GMT]]></title><description><![CDATA[<p>Mr Train schrieb:</p>
<blockquote>
<p>Warum wäre der Code für C++11 nicht korrekt? Ich habe mit -std=c++11 kompiliert.</p>
</blockquote>
<p>Sorry, habe mich verguckt. Müsste natürlich für C++11 und C++14 funktionieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2494418</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2494418</guid><dc:creator><![CDATA[Torsten Robitzki]]></dc:creator><pubDate>Thu, 28 Apr 2016 11:09:46 GMT</pubDate></item><item><title><![CDATA[Reply to array.size() als Template-Parameter on Thu, 28 Apr 2016 11:11:48 GMT]]></title><description><![CDATA[<p>Mr Train schrieb:</p>
<blockquote>
<p>Torsten Robitzki schrieb:</p>
<blockquote>
<p>Naja, wenn wir mal davon ausgehen, dass die angegebene Referenz korrekt ist, dann kommt es drauf an, ob das Beispiel C++11 oder C++14 ist. Für C++14 wäre Dein code dann korrekt.</p>
</blockquote>
<p>Warum wäre der Code für C++11 nicht korrekt?</p>
</blockquote>
<p>Das wüsste ich auch gern, denn AFAICS ist der Code auch in C++11 korrekt (N3337 zeigt <code>size</code> als <code>constexpr</code> ).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2494419</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2494419</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Thu, 28 Apr 2016 11:11:48 GMT</pubDate></item></channel></rss>