<?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[Floating point concept für templates]]></title><description><![CDATA[<p>Hallo!</p>
<p>Wie stelle ich am besten/schönsten zur Compilezeit sicher, dass ein übergebener Templateparameter <code>float</code> oder <code>double</code> ist? Boost vorhanden.</p>
<pre><code class="language-cpp">template&lt;class T&gt;
void foo(T arg)
{
   // don't compile if T neither float nor double

   ...
}
</code></pre>
<p>Muss ich das wirklich selbst über Spezialisierungen machen oder gibt's da schon was Einfaches fertig? <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>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/291926/floating-point-concept-für-templates</link><generator>RSS for Node</generator><lastBuildDate>Mon, 17 Aug 2026 08:28:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/291926.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 30 Aug 2011 08:39:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Floating point concept für templates on Tue, 30 Aug 2011 08:39:06 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Wie stelle ich am besten/schönsten zur Compilezeit sicher, dass ein übergebener Templateparameter <code>float</code> oder <code>double</code> ist? Boost vorhanden.</p>
<pre><code class="language-cpp">template&lt;class T&gt;
void foo(T arg)
{
   // don't compile if T neither float nor double

   ...
}
</code></pre>
<p>Muss ich das wirklich selbst über Spezialisierungen machen oder gibt's da schon was Einfaches fertig? <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>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2112333</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112333</guid><dc:creator><![CDATA[berndbernd]]></dc:creator><pubDate>Tue, 30 Aug 2011 08:39:06 GMT</pubDate></item><item><title><![CDATA[Reply to Floating point concept für templates on Tue, 30 Aug 2011 08:41:29 GMT]]></title><description><![CDATA[<p>sind dafür nicht type traits?!?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2112335</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112335</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Tue, 30 Aug 2011 08:41:29 GMT</pubDate></item><item><title><![CDATA[Reply to Floating point concept für templates on Tue, 30 Aug 2011 08:49:51 GMT]]></title><description><![CDATA[<p>Darf ich allgemein fragen: Warum? Was hast du gegen long double und meine eigene super tolle Fließkommaklasse?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2112336</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112336</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 30 Aug 2011 08:49:51 GMT</pubDate></item><item><title><![CDATA[Reply to Floating point concept für templates on Tue, 30 Aug 2011 08:53:49 GMT]]></title><description><![CDATA[<p>Versuchs mal mit boost.type_traits und static_assert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2112341</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112341</guid><dc:creator><![CDATA[GorbGorb]]></dc:creator><pubDate>Tue, 30 Aug 2011 08:53:49 GMT</pubDate></item><item><title><![CDATA[Reply to Floating point concept für templates on Tue, 30 Aug 2011 08:58:49 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Darf ich allgemein fragen: Warum? Was hast du gegen long double und meine eigene super tolle Fließkommaklasse?</p>
</blockquote>
<p>Nichts Wirksames :p Ne ernsthaft, von mir aus dürfen die es auch gern sein, ich möchte nur sicherstellen, dass <code>T</code> reelle Zahlen darstellen kann und kein Ganzzahl-Typ oder gar komplex o.ä. ist.</p>
<p>GorbGorb schrieb:</p>
<blockquote>
<p>Versuchs mal mit boost.type_traits und static_assert.</p>
</blockquote>
<p>Kannst du mir vielleicht ein kleines Beispiel geben wie ich das konkret zusammenbauen muss?</p>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2112342</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112342</guid><dc:creator><![CDATA[berndbernd]]></dc:creator><pubDate>Tue, 30 Aug 2011 08:58:49 GMT</pubDate></item><item><title><![CDATA[Reply to Floating point concept für templates on Tue, 30 Aug 2011 08:59:19 GMT]]></title><description><![CDATA[<p>enable_if, ansonsten static_assert, wenn vorhanden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2112343</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112343</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Tue, 30 Aug 2011 08:59:19 GMT</pubDate></item><item><title><![CDATA[Reply to Floating point concept für templates on Tue, 30 Aug 2011 09:03:54 GMT]]></title><description><![CDATA[<p>berndbernd schrieb:</p>
<blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Darf ich allgemein fragen: Warum? Was hast du gegen long double und meine eigene super tolle Fließkommaklasse?</p>
</blockquote>
<p>Nichts Wirksames :p Ne ernsthaft, von mir aus dürfen die es auch gern sein, ich möchte nur sicherstellen, dass <code>T</code> reelle Zahlen darstellen kann und kein Ganzzahl-Typ oder gar komplex o.ä. ist.</p>
<p>GorbGorb schrieb:</p>
<blockquote>
<p>Versuchs mal mit boost.type_traits und static_assert.</p>
</blockquote>
<p>Kannst du mir vielleicht ein kleines Beispiel geben wie ich das konkret zusammenbauen muss?</p>
<p>Grüße</p>
</blockquote>
<p>Naja generell sieht das ungefähr so aus:</p>
<pre><code class="language-cpp">static_assert( type_trait&lt; T &gt;::value , &quot;error&quot; );
</code></pre>
<p>Wie genau der type_trait für deinen Fall heißt, weiß ich nicht auswendig, aber das findest du raus <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2112347</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112347</guid><dc:creator><![CDATA[GorbGorb]]></dc:creator><pubDate>Tue, 30 Aug 2011 09:03:54 GMT</pubDate></item><item><title><![CDATA[Reply to Floating point concept für templates on Tue, 30 Aug 2011 09:13:25 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template&lt;typename T&gt;
struct IsFloat
{
  static bool const value = false;
};

template&lt;&gt;
struct IsFloat&lt;float&gt;
{
  static bool const value = true;
}

template&lt;&gt;
struct IsFloat&lt;double&gt;
{
  static bool const value = true;
}

template&lt;&gt;
struct IsFloat&lt;long double&gt;
{
  static bool const value = true;
}

template&lt;typename T&gt;
T MyFunction(T bla)
{
  static_assert(IsFloat&lt;T&gt;::value, &quot;T is not float !&quot;);
  return bla;
}

int main(int argc, char** argv)
{
  MyFunction(1234);
  MyFunction(12.4);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2112358</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112358</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Tue, 30 Aug 2011 09:13:25 GMT</pubDate></item><item><title><![CDATA[Reply to Floating point concept für templates on Tue, 30 Aug 2011 09:14:26 GMT]]></title><description><![CDATA[<p>Ich meine mich erinnern zu können, dass es dafür schon einen type-trait im neuen C++11 Header &lt;type_traits&gt; gibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2112359</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112359</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Tue, 30 Aug 2011 09:14:26 GMT</pubDate></item><item><title><![CDATA[Reply to Floating point concept für templates on Tue, 30 Aug 2011 09:24:27 GMT]]></title><description><![CDATA[<p><code>std::is_floating_point</code> , gibts auch in Boost.TypeTraits.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2112362</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112362</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 30 Aug 2011 09:24:27 GMT</pubDate></item><item><title><![CDATA[Reply to Floating point concept für templates on Tue, 30 Aug 2011 09:46:33 GMT]]></title><description><![CDATA[<p>Danke euch allen. Habs jetzt so gelöst:</p>
<pre><code class="language-cpp">BOOST_STATIC_ASSERT(boost::is_floating_point&lt;T&gt;::value);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2112373</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112373</guid><dc:creator><![CDATA[berndbernd]]></dc:creator><pubDate>Tue, 30 Aug 2011 09:46:33 GMT</pubDate></item><item><title><![CDATA[Reply to Floating point concept für templates on Tue, 30 Aug 2011 10:15:12 GMT]]></title><description><![CDATA[<p>berndbernd schrieb:</p>
<blockquote>
<p>Danke euch allen. Habs jetzt so gelöst:</p>
<pre><code class="language-cpp">BOOST_STATIC_ASSERT(boost::is_floating_point&lt;T&gt;::value);
</code></pre>
</blockquote>
<p>Hallo Bernd,</p>
<p>der Nachteil von einem STATIC_ASSERT ist, dass im Falle eines Compilefehlers, dieser nur den Ort des STATIC_ASSERT angibt und nicht den Ort wo z.B. die Funktin mit dem unerwünschten Typen aufgerufen wird. Besser ist deshalb der Einsatz von <a href="http://www.boost.org/doc/libs/1_47_0/libs/utility/enable_if.html" rel="nofollow">boost.enable_if</a>. In Deinem Fall etwa so:</p>
<pre><code class="language-cpp">#include &lt;boost/type_traits/is_floating_point.hpp&gt;
#include &lt;boost/utility/enable_if.hpp&gt;

template&lt;class T&gt;
typename boost::enable_if&lt; boost::is_floating_point&lt; T &gt;, void &gt;::type // Bem.: void kann man auch weglassen, da Defaulttyp
    foo(T arg)
{
    // don't compile if T neither float nor double
}

int main()
{
    using namespace std;
    foo( 3. ); // ok
    foo( 3 ); // liefert 'Failed to specialize function template' mit Fehler in DIESER Zeile
    return 0;
}
</code></pre>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2112388</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112388</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Tue, 30 Aug 2011 10:15:12 GMT</pubDate></item><item><title><![CDATA[Reply to Floating point concept für templates on Tue, 30 Aug 2011 10:52:16 GMT]]></title><description><![CDATA[<p>Ich hatte mal irgendwo ein nettes Makro für C++11 gesehen:</p>
<pre><code class="language-cpp">#include &lt;type_traits&gt;

#define REQUIRES(...) ,class=typename std::enable_if&lt;(__VA_ARGS__)&gt;::type

template&lt;class T
  REQUIRES( std::is_floating_point&lt;T&gt;::value )
&gt;
void foo(T x);
</code></pre>
<p>Das funzt, weil in C++11 Funktionstemplates Default-Template-Parameter haben dürfen. Allerdings klappt das nicht mehr mit Variadischen Templates, glaube ich.</p>
<p>Es wäre ja auch <em>nur</em> praktisch gewesen, wenn C++11 so etwas direkt unterstützt hätte *seufz*. Ich bin mal gespannt, (ob) was aus dem Concept-C++-Lager noch kommen wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2112401</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112401</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Tue, 30 Aug 2011 10:52:16 GMT</pubDate></item><item><title><![CDATA[Reply to Floating point concept für templates on Tue, 30 Aug 2011 12:33:00 GMT]]></title><description><![CDATA[<p>Werner Salomon schrieb:</p>
<blockquote>
<p>berndbernd schrieb:</p>
<blockquote>
<p>Danke euch allen. Habs jetzt so gelöst:</p>
<pre><code class="language-cpp">BOOST_STATIC_ASSERT(boost::is_floating_point&lt;T&gt;::value);
</code></pre>
</blockquote>
<p>Hallo Bernd,</p>
<p>der Nachteil von einem STATIC_ASSERT ist, dass im Falle eines Compilefehlers, dieser nur den Ort des STATIC_ASSERT angibt und nicht den Ort wo z.B. die Funktin mit dem unerwünschten Typen aufgerufen wird. Besser ist deshalb der Einsatz von <a href="http://www.boost.org/doc/libs/1_47_0/libs/utility/enable_if.html" rel="nofollow">boost.enable_if</a>. In Deinem Fall etwa so:</p>
<pre><code class="language-cpp">#include &lt;boost/type_traits/is_floating_point.hpp&gt;
#include &lt;boost/utility/enable_if.hpp&gt;

template&lt;class T&gt;
typename boost::enable_if&lt; boost::is_floating_point&lt; T &gt;, void &gt;::type // Bem.: void kann man auch weglassen, da Defaulttyp
    foo(T arg)
{
    // don't compile if T neither float nor double
}

int main()
{
    using namespace std;
    foo( 3. ); // ok
    foo( 3 ); // liefert 'Failed to specialize function template' mit Fehler in DIESER Zeile
    return 0;
}
</code></pre>
<p>Gruß<br />
Werner</p>
</blockquote>
<p>Das ist natürlich ein gutes Argument. Gibt es in ähnlicher Weise auch eine Möglichkeit, das Concept auf eine Klasse und nicht nur eine Funktion zu beziehen?</p>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2112481</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112481</guid><dc:creator><![CDATA[berndbernd]]></dc:creator><pubDate>Tue, 30 Aug 2011 12:33:00 GMT</pubDate></item><item><title><![CDATA[Reply to Floating point concept für templates on Tue, 30 Aug 2011 12:42:19 GMT]]></title><description><![CDATA[<p>berndbernd schrieb:</p>
<blockquote>
<p>Gibt es in ähnlicher Weise auch eine Möglichkeit, das Concept auf eine Klasse und nicht nur eine Funktion zu beziehen?</p>
</blockquote>
<p><a href="http://www.boost.org/doc/libs/1_47_0/libs/utility/enable_if.html#htoc6" rel="nofollow">http://www.boost.org/doc/libs/1_47_0/libs/utility/enable_if.html#htoc6</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2112489</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112489</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Tue, 30 Aug 2011 12:42:19 GMT</pubDate></item><item><title><![CDATA[Reply to Floating point concept für templates on Tue, 30 Aug 2011 12:43:35 GMT]]></title><description><![CDATA[<p>berndbernd schrieb:</p>
<blockquote>
<p>Das ist natürlich ein gutes Argument. Gibt es in ähnlicher Weise auch eine Möglichkeit, das Concept auf eine Klasse und nicht nur eine Funktion zu beziehen?</p>
</blockquote>
<p>Ja ..</p>
<p>Werner Salomon schrieb:</p>
<blockquote>
<p>Besser ist deshalb der Einsatz von <a href="http://www.boost.org/doc/libs/1_47_0/libs/utility/enable_if.html" rel="nofollow">boost.enable_if</a>.</p>
</blockquote>
<p>folge dem Link <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="😉"
    /> und lese das Kapitel '3.1 Enabling template class specializations'</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2112491</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112491</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Tue, 30 Aug 2011 12:43:35 GMT</pubDate></item><item><title><![CDATA[Reply to Floating point concept für templates on Tue, 30 Aug 2011 12:53:04 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>Ich hatte mal irgendwo ein nettes Makro für C++11 gesehen:</p>
<pre><code class="language-cpp">#include &lt;type_traits&gt;

#define REQUIRES(...) ,class=typename std::enable_if&lt;(__VA_ARGS__)&gt;::type

template&lt;class T
  REQUIRES( std::is_floating_point&lt;T&gt;::value )
&gt;
void foo(T x);
</code></pre>
<p>Das funzt, weil in C++11 Funktionstemplates Default-Template-Parameter haben dürfen. Allerdings klappt das nicht mehr mit Variadischen Templates, glaube ich.</p>
</blockquote>
<p>Sehr interessant. Damit könnte man enable_if auch für Konvertierungsoperatoren benutzen. Bei einer (oberflächlichen) Suche nach Regeln, die dieses Konstrukt im Zusammenhang mit Funktionsparameterpacks verbieten, habe ich erst einmal nichts gefunden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2112494</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112494</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 30 Aug 2011 12:53:04 GMT</pubDate></item><item><title><![CDATA[Reply to Floating point concept für templates on Tue, 30 Aug 2011 14:22:28 GMT]]></title><description><![CDATA[<p>Werner Salomon schrieb:</p>
<blockquote>
<p>folge dem Link <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="😉"
    /> und lese das Kapitel '3.1 Enabling template class specializations'</p>
</blockquote>
<p>Ah, da war ich schon mal <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="🙂"
    /> Habs irgendwie beim ersten Mal nicht geblickt.</p>
<p>Sehe ich das richtig, dass ich auf alle Fälle eine Standard-Template-Deklaration brauche und dann halt die Spezialisierung mit dem enable_if für Floatingpoint-Typen - selbst wenn es die Klasse ausschließlich für Floatingpoint-Typen geben soll?</p>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2112502</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112502</guid><dc:creator><![CDATA[berndbernd]]></dc:creator><pubDate>Tue, 30 Aug 2011 14:22:28 GMT</pubDate></item><item><title><![CDATA[Reply to Floating point concept für templates on Tue, 30 Aug 2011 14:42:30 GMT]]></title><description><![CDATA[<p>Werner Salomon schrieb:</p>
<blockquote>
<p>der Nachteil von einem STATIC_ASSERT ist, dass im Falle eines Compilefehlers, dieser nur den Ort des STATIC_ASSERT angibt und nicht den Ort wo z.B. die Funktin mit dem unerwünschten Typen aufgerufen wird. Besser ist deshalb (...)</p>
</blockquote>
<p>Ach, das kommt auf den Compiler drauf an:</p>
<p><a href="http://ideone.com/6aiYZ" rel="nofollow">http://ideone.com/6aiYZ</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2112561</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112561</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 30 Aug 2011 14:42:30 GMT</pubDate></item><item><title><![CDATA[Reply to Floating point concept für templates on Tue, 30 Aug 2011 14:52:26 GMT]]></title><description><![CDATA[<p>Bei Templates ist es doch üblich, dass die Instanziierungshierarchie aufgelistet wird, daher sind entsprechende Fehlermeldungen ja auch oft so lang.</p>
<p>An <code>enable_if</code> stört mich, dass die Schnittstelle unübersichtlich wird (ist z.B. für Doxygen problematisch). Das <code>REQUIRES</code> -Makro sieht jedoch interessant aus...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2112568</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112568</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 30 Aug 2011 14:52:26 GMT</pubDate></item><item><title><![CDATA[Reply to Floating point concept für templates on Tue, 30 Aug 2011 21:00:18 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>An <code>enable_if</code> stört mich, dass die Schnittstelle unübersichtlich wird</p>
</blockquote>
<p>Ja, mich auch.</p>
<p>Wenn man nur ne Fehlermeldung will finde ich <code>static_assert()</code> gut. Kommt IMO einfach drauf an was man will/braucht.<br />
Also ob es sofort ne Fehlermeldung geben soll, oder andere Overloads berücksichtigt werden sollen (SFINAE halt).</p>
<p>Und so lange ich mir nicht sicher bin was die bessere Variante ist, tendiere ich zu <code>static_assert()</code> , da man damit schneller ne Fehlermeldung bekommt. Und das ist IMO immer gut, wenn man was macht, was nicht vorgesehen war (und es kann nicht gut vorgesehen gewesen sein, wenn man sich nicht sicher war ob man SFINAE braucht oder nicht).</p>
<p>BTW: auch MSVC 10 gibt mit <code>static_assert()</code> ne brauchbare Fehlermeldung aus:</p>
<pre><code>1&gt;vc10test.cpp(7): error C2338: will floating point!!!11elf
1&gt;          vc10test.cpp(13) : see reference to function template instantiation 'void foo&lt;int&gt;(T)' being compiled
1&gt;          with
1&gt;          [
1&gt;              T=int
1&gt;          ]
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2112669</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112669</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 30 Aug 2011 21:00:18 GMT</pubDate></item><item><title><![CDATA[Reply to Floating point concept für templates on Wed, 31 Aug 2011 07:42:24 GMT]]></title><description><![CDATA[<p>berndbernd schrieb:</p>
<blockquote>
<p>Sehe ich das richtig, dass ich auf alle Fälle eine Standard-Template-Deklaration brauche und dann halt die Spezialisierung mit dem enable_if für Floatingpoint-Typen - selbst wenn es die Klasse ausschließlich für Floatingpoint-Typen geben soll?</p>
</blockquote>
<p>So ist es in der Hilfe beschrieben. Wobei ich nicht ausschließen will, dass es noch andere Lösungen gibt.<br />
In Deinem Fall sähe es wohl so aus:</p>
<pre><code class="language-cpp">#include &lt;boost/type_traits/is_floating_point.hpp&gt;
#include &lt;boost/utility/enable_if.hpp&gt; 

template&lt; typename T, typename Enable = void &gt;
struct Foo; // undefined struct

template&lt; typename T &gt;
struct Foo&lt; T, typename boost::enable_if&lt; boost::is_floating_point&lt; T &gt; &gt;::type &gt;
{
    // ... hier kommt die Implementierung von Foo&lt;T&gt;
};

int main()
{
    Foo&lt; double &gt; d;
    Foo&lt; int &gt; i; // &lt;== Compilefehler: 'i' uses undefined struct 'Foo&lt;T&gt;'
    return 0;
}
</code></pre>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2112788</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112788</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Wed, 31 Aug 2011 07:42:24 GMT</pubDate></item></channel></rss>