<?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[problem mit numerical_limits&amp;lt;int&amp;gt;::max()]]></title><description><![CDATA[<p>Hi, leute.</p>
<p>Hoffe mir kann jemand helfen:<br />
Ich han ein Problem mit numerical_limits&lt;int&gt;::max();</p>
<p>der Compiler (vc++) macht hier Blödsinn, der auf das quasi allgegenwärtige Vorhandensein des Macros max zurückzuführne ist.</p>
<p>Gibt es eine Möglichkeit das zu umgehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/221776/problem-mit-numerical_limits-lt-int-gt-max</link><generator>RSS for Node</generator><lastBuildDate>Sun, 27 Sep 2026 16:59:35 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/221776.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 03 Sep 2008 11:16:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to problem mit numerical_limits&amp;lt;int&amp;gt;::max() on Wed, 03 Sep 2008 11:16:37 GMT]]></title><description><![CDATA[<p>Hi, leute.</p>
<p>Hoffe mir kann jemand helfen:<br />
Ich han ein Problem mit numerical_limits&lt;int&gt;::max();</p>
<p>der Compiler (vc++) macht hier Blödsinn, der auf das quasi allgegenwärtige Vorhandensein des Macros max zurückzuführne ist.</p>
<p>Gibt es eine Möglichkeit das zu umgehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1575809</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1575809</guid><dc:creator><![CDATA[vlad_tepesch]]></dc:creator><pubDate>Wed, 03 Sep 2008 11:16:37 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit numerical_limits&amp;lt;int&amp;gt;::max() on Wed, 03 Sep 2008 11:24:01 GMT]]></title><description><![CDATA[<p>Das dürfte eigentlich nur passieren, wenn Du &lt;windows.h&gt; oder irgendetwas davon abgeleitetes inkludierst. Abschalten kann man das (wenn ich mich recht entsinne), indem man vor dem Inkludieren <code>#define NOMINMAX</code> setzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1575814</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1575814</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 03 Sep 2008 11:24:01 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit numerical_limits&amp;lt;int&amp;gt;::max() on Wed, 03 Sep 2008 11:24:26 GMT]]></title><description><![CDATA[<p>vlad_tepesch schrieb:</p>
<blockquote>
<p>der Compiler (vc++) macht hier Blödsinn, der auf das quasi allgegenwärtige Vorhandensein des Macros max zurückzuführne ist.</p>
<p>Gibt es eine Möglichkeit das zu umgehen?</p>
</blockquote>
<p>Dann beende doch das allgegenwärtige Vorhandensein, z.B. mit einem #undef max<br />
Das mit dem allgegenwärtig wage ich allerdings zu bezweifeln, mir ist das Makro bisher nicht vor die Flinte gekommen. Ich meine mich allerdings erinnern zu können, dass irgendwo in den winapi-Headern oder einem anderen M$-Auswurf diese Makro-Untat verübt wird. Ebenso meine ich mich erinnern zu können dass man die Definition dieses Makros mit einem weiteren Makro verhindern kann, irgendwas á la #define NOMINMAX oder ähnliches.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1575816</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1575816</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 03 Sep 2008 11:24:26 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit numerical_limits&amp;lt;int&amp;gt;::max() on Wed, 03 Sep 2008 11:36:39 GMT]]></title><description><![CDATA[<p>da das verwendete eine templateklasse ist, welche im header implementiert ist, hätte ein undef unvorhersehbare Folgen, es sei denn man könnte die alte definition speichern und danach wieder herstellen.<br />
Ebendso hat man keinen Einfluss darauf, welche header vor dem eigenen eingebunden wurden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1575821</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1575821</guid><dc:creator><![CDATA[vlad_tepesch]]></dc:creator><pubDate>Wed, 03 Sep 2008 11:36:39 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit numerical_limits&amp;lt;int&amp;gt;::max() on Wed, 03 Sep 2008 11:39:26 GMT]]></title><description><![CDATA[<p>wozu brauchst du denn das max-makro?</p>
<p>wieso versuchst du es denn nicht mal mit #define NOMINMAX, dann #include &lt;windows.h&gt; - haben doch nun auch schon 2 gesagt, dass es das behebt...</p>
<p>wenn du ne max-fkt willst, dann nimm std::max ()...</p>
<p>hf</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1575824</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1575824</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Wed, 03 Sep 2008 11:39:26 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit numerical_limits&amp;lt;int&amp;gt;::max() on Wed, 03 Sep 2008 11:56:37 GMT]]></title><description><![CDATA[<p>ich habe ja keinen einfluss darauf, ob das macro da ist, oder nicht:</p>
<p>headerdatei meiner klasse</p>
<pre><code class="language-cpp">#include &lt;limits&gt;

template&lt;class T&gt;
class MyClass
{
public:
  MyClass()
    :m_min(numeric_limits&lt;T&gt;::max())
    ,m_max(numeric_limits&lt;T&gt;::min())
  {}  

  T m_min;
  T m_max;
}
</code></pre>
<p>wenn jetzt an irgend einer Stelle im Projekt (die ich nicht kenne und auf die ich keinen Einfluss habe) dieser header includiert wird, wo dieses max, oder min makro präsent ist, gehts net.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1575829</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1575829</guid><dc:creator><![CDATA[vlad_tepesch]]></dc:creator><pubDate>Wed, 03 Sep 2008 11:56:37 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit numerical_limits&amp;lt;int&amp;gt;::max() on Wed, 03 Sep 2008 12:17:16 GMT]]></title><description><![CDATA[<p>vlad_tepesch schrieb:</p>
<blockquote>
<p>da das verwendete eine templateklasse ist, welche im header implementiert ist, hätte ein undef unvorhersehbare Folgen</p>
</blockquote>
<p>das undef hätte nur dann unvorhersehbare Folgen wenn du das Makro das dir irgendwo aus dem windows.h header untergejubelt wurde, auch benutzen willst. Das Makro wird in anderen headern und in deinem Code nicht benutzt, deshalb kannst du es getrost per undef entsorgen, bevor es sich wie hier in deine header schleicht und deine Definitionen verhunzt. Was du hier siehst ist eines der wichtigsten Argumente gegen Makros in Headern, vor allem wenn sie so prägnant kurze namen haben - je geläufiger der Name desto größer die Wahrscheinlichkeit dass irgendwer den Namen woanders benutzt, nicht ahnend dass das Makro ihm den Code zerstört. Deshalb: windows.h nur mit vorherigem #define NOMINMAX benutzen und wenn möglich als allerletztes einbinden, damit diese gruselige Makropolitik dir nicht später eingebundene Header zerpflügen kann.</p>
<blockquote>
<p>wenn jetzt an irgend einer Stelle im Projekt (die ich nicht kenne und auf die ich keinen Einfluss habe) dieser header includiert wird, wo dieses max, oder min makro präsent ist, gehts net.</p>
</blockquote>
<p>Deshalb solltest du dafür sorgen dass diese bescheuerten Makros nie, nie, nie irgendwo präsent sind, wo du noch Header einbindest oder gar in Headern selbst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1575847</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1575847</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 03 Sep 2008 12:17:16 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit numerical_limits&amp;lt;int&amp;gt;::max() on Wed, 03 Sep 2008 12:16:27 GMT]]></title><description><![CDATA[<p>vlad_tepesch schrieb:</p>
<blockquote>
<p>ich habe ja keinen einfluss darauf, ob das macro da ist, oder nicht</p>
</blockquote>
<p>Doch. Makros kann man <code>#undef</code> en.</p>
<p>vlad_tepesch schrieb:</p>
<blockquote>
<p>da das verwendete eine templateklasse ist, welche im header implementiert ist, hätte ein undef unvorhersehbare Folgen, es sei denn man könnte die alte definition speichern und danach wieder herstellen.</p>
</blockquote>
<p>Wieso brauchst du das Makro nachher überhaupt noch? In C++ sollte das sowieso nicht verwendet werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1575848</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1575848</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 03 Sep 2008 12:16:27 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit numerical_limits&amp;lt;int&amp;gt;::max() on Wed, 03 Sep 2008 12:19:06 GMT]]></title><description><![CDATA[<p>meine frage war ja eigendlich, ob ma irgendwie die definition von max sichern kann, dann ein undef und dann redefinieren, ohne dass ich de ursprüngliche definition kenn muss. so ähnich wie mit praga pushes und pops</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1575853</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1575853</guid><dc:creator><![CDATA[vlad_tepesch]]></dc:creator><pubDate>Wed, 03 Sep 2008 12:19:06 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit numerical_limits&amp;lt;int&amp;gt;::max() on Wed, 03 Sep 2008 12:20:43 GMT]]></title><description><![CDATA[<p>Vor jedem windows.h-Include ganz einfach #define NOMINMAX und fertig.</p>
<p>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1575856</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1575856</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Wed, 03 Sep 2008 12:20:43 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit numerical_limits&amp;lt;int&amp;gt;::max() on Wed, 03 Sep 2008 12:23:08 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Doch. Makros kann man <code>#undef</code> en.</p>
</blockquote>
<p>das sollte man aber nicht in headern machen, die von anderen benutzt werden</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Wieso brauchst du das Makro nachher überhaupt noch? In C++ sollte das sowieso nicht verwendet werden.</p>
</blockquote>
<p>das ändert ja nix daran, dass es automatisch da ist und mancher trotzdem verwendet</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1575857</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1575857</guid><dc:creator><![CDATA[vlad_tepesch]]></dc:creator><pubDate>Wed, 03 Sep 2008 12:23:08 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit numerical_limits&amp;lt;int&amp;gt;::max() on Wed, 03 Sep 2008 12:25:30 GMT]]></title><description><![CDATA[<p>SideWinder schrieb:</p>
<blockquote>
<p>Vor jedem windows.h-Include ganz einfach #define NOMINMAX und fertig.</p>
<p>MfG SideWinder</p>
</blockquote>
<p>nur habe ich keinen zugriff auf diese files und muss die umgebung, in der ich includet werde, nehmen, wie ich sie bekomme</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1575861</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1575861</guid><dc:creator><![CDATA[vlad_tepesch]]></dc:creator><pubDate>Wed, 03 Sep 2008 12:25:30 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit numerical_limits&amp;lt;int&amp;gt;::max() on Wed, 03 Sep 2008 12:31:19 GMT]]></title><description><![CDATA[<p>Es mag sinnvoll sein, statt eines #undef eine Fehlermeldung auszugeben. Denn grundsätzlich ist davon auszugehen, dass es sich hier um einen Konfigurationsfehler handelt, schließlich darf kein Header der Standardbibliothek mit vorhandenem min/max-Makro verwendet werden. z.B. so</p>
<pre><code class="language-cpp">#if defined max || defined min
    #if defined __WINDOWS__ &amp;&amp; !defined NOMINMAX
        #error Please define NOMINMAX before including &lt;windows.h&gt;
    #else
        #error This header cannot function properly with min/max-macros defined
    #endif
#endif
</code></pre>
<p>Oder man schwächt das Ganze ab zu einer Warnung mit folgendem #undef</p>
<p>Ein temporäres umdefinieren kann man auch erwägen</p>
<pre><code class="language-cpp">#ifdef max
    #undef max
    #define max max
#endif
...
#ifdef max
    #undef max
    #define max( a, b ) ( ((b) &lt; (a)) ? (a) : (b) )
#endif
</code></pre>
<p>Problem hierbei ist natürlich, dass man den vorherigen Inhalt des Makros nicht kennt, und ihn somit nicht sicher wiederherstellen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1575862</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1575862</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 03 Sep 2008 12:31:19 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit numerical_limits&amp;lt;int&amp;gt;::max() on Wed, 03 Sep 2008 13:00:09 GMT]]></title><description><![CDATA[<p>vlad_tepesch schrieb:</p>
<blockquote>
<p>ich habe ja keinen einfluss darauf, ob das macro da ist, oder nicht:</p>
<p>headerdatei meiner klasse</p>
<pre><code class="language-cpp">#include &lt;limits&gt;

template&lt;class T&gt;
class MyClass
{
public:
  MyClass()
    :m_min(numeric_limits&lt;T&gt;::max())
    ,m_max(numeric_limits&lt;T&gt;::min())
  {}  

  T m_min;
  T m_max;
}
</code></pre>
<p>wenn jetzt an irgend einer Stelle im Projekt (die ich nicht kenne und auf die ich keinen Einfluss habe) dieser header includiert wird, wo dieses max, oder min makro präsent ist, gehts net.</p>
</blockquote>
<p>Kann es sein, dass Dir die Includeguards fehlen?</p>
<pre><code class="language-cpp">#ifndef __MEIN_HEADER_H__INCLUDED
#define __MEIN_HEADER_H__INCLUDED
//code
#endif
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1575877</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1575877</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 03 Sep 2008 13:00:09 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit numerical_limits&amp;lt;int&amp;gt;::max() on Wed, 03 Sep 2008 13:05:07 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>mit folgendem #undef</p>
<p>Ein temporäres umdefinieren kann man auch erwägen</p>
<pre><code class="language-cpp">#ifdef max
    #undef max
    #define max max
#endif
...
#ifdef max
    #undef max
    #define max( a, b ) ( ((b) &lt; (a)) ? (a) : (b) )
#endif
</code></pre>
<p>Problem hierbei ist natürlich, dass man den vorherigen Inhalt des Makros nicht kennt, und ihn somit nicht sicher wiederherstellen kann.</p>
</blockquote>
<p>Ich bin mir nicht ganz sicher ob man Makros verschachteln kann (eigentlich will ichs auch nicht wissen weil ichs nicht anwenden will), aber rein hypotetsich, geht sowas?</p>
<pre><code class="language-cpp">#ifdef max
  #define SAVEDMAX max
  #undef max
#endif
...
#ifdef SAVEDMAX
  #define max SAVEDMAX
  #undef SAVEDMAX
#endif
</code></pre>
<p>(Oh Graus...)</p>
<p>Tachyon schrieb:</p>
<blockquote>
<p>Kann es sein, dass Dir die Includeguards fehlen?</p>
<pre><code class="language-cpp">#ifndef __MEIN_HEADER_H__INCLUDED
#define __MEIN_HEADER_H__INCLUDED
//code
#endif
</code></pre>
</blockquote>
<p>Die helfen leider auch nicht weiter:</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;
//ab hier ist das Makro max definiert und verändert alles was an max noch kommt
#include &quot;myheader.h&quot; //jedes Vorkommen von max in myheader.h wird HIER durch das Makro ersetzt - woanders vielleicht nicht...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1575880</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1575880</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 03 Sep 2008 13:05:07 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit numerical_limits&amp;lt;int&amp;gt;::max() on Wed, 03 Sep 2008 13:11:27 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Ich bin mir nicht ganz sicher ob man Makros verschachteln kann (eigentlich will ichs auch nicht wissen weil ichs nicht anwenden will), aber rein hypotetsich, geht sowas?</p>
<pre><code class="language-cpp">#ifdef max
  #define SAVEDMAX max
  #undef max
#endif
...
#ifdef SAVEDMAX
  #define max SAVEDMAX
  #undef SAVEDMAX
#endif
</code></pre>
</blockquote>
<p>Nein, das Problem ist hier, dass <code>SAVEDMAX</code> nur als Textersetzung für <code>max</code> dient. Die Funktionalität von <code>max</code> wird eben nicht übertragen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1575885</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1575885</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 03 Sep 2008 13:11:27 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit numerical_limits&amp;lt;int&amp;gt;::max() on Wed, 03 Sep 2008 13:12:16 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>[...]<br />
Ich bin mir nicht ganz sicher ob man Makros verschachteln kann (eigentlich will ichs auch nicht wissen weil ichs nicht anwenden will), aber rein hypotetsich, geht sowas?</p>
<pre><code class="language-cpp">#ifdef max
  #define SAVEDMAX max
  #undef max
#endif
...
#ifdef SAVEDMAX
  #define max SAVEDMAX
  #undef SAVEDMAX
#endif
</code></pre>
<p>(Oh Graus...)</p>
</blockquote>
<p>Ich denke nicht, da hierbei nur <code>SAVEDMAX</code> mit <code>max</code> <strong>textuell</strong> ersetzt wird.</p>
<p>pumuckl schrieb:</p>
<blockquote>
<p>Tachyon schrieb:</p>
<blockquote>
<p>Kann es sein, dass Dir die Includeguards fehlen?</p>
<pre><code class="language-cpp">#ifndef __MEIN_HEADER_H__INCLUDED
#define __MEIN_HEADER_H__INCLUDED
//code
#endif
</code></pre>
</blockquote>
<p>Die helfen leider auch nicht weiter:</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;
//ab hier ist das Makro max definiert und verändert alles was an max noch kommt
#include &quot;myheader.h&quot; //jedes Vorkommen von max in myheader.h wird HIER durch das Makro ersetzt - woanders vielleicht nicht...
</code></pre>
</blockquote>
<p>Ich ging hierbei davon aus, dass eigentlich gar keine Konflikte mit den Windows-Defines bestehen, sondern dass die eigentlich Ursache des Problems die fehlenden Includeguards sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1575886</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1575886</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 03 Sep 2008 13:12:16 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit numerical_limits&amp;lt;int&amp;gt;::max() on Wed, 03 Sep 2008 13:20:32 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Kann es sein, dass Dir die Includeguards fehlen?</p>
</blockquote>
<p>hab ich jetzt mal der einfach halber weggelassen</p>
<p>an campers ersten vorschlag hab ich auch schon gedacht und werd ihn wohl benutzen. (es ist hoffentlich niemand so dämlich die min und max makros umzudefineren, dass sie was anderes machen)</p>
<p>ich hätt halt gehofft das jemand ne andere alternative kennt, das makro zu konservieren, oder den präprozessor für bestimmte codeteile abzuschalten.<br />
ZB mittels pragmas, oder so.</p>
<p>pumuckles vorschlag, geht definitv nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1575891</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1575891</guid><dc:creator><![CDATA[vlad_tepesch]]></dc:creator><pubDate>Wed, 03 Sep 2008 13:20:32 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit numerical_limits&amp;lt;int&amp;gt;::max() on Wed, 03 Sep 2008 13:41:57 GMT]]></title><description><![CDATA[<p>vlad_tepesch schrieb:</p>
<blockquote>
<p>an campers ersten vorschlag hab ich auch schon gedacht und werd ihn wohl benutzen.</p>
</blockquote>
<p>Würde ich auch nicht machen. Ich würds einfach analog zu den Standardheadern wie &lt;limits&gt; machen, die auch davon ausgehen, dass niemand so bescheuert ist, ein Makro wie max zu defineren, bevor er die Header einbindet. Du könntest zwar wie vorgehabt nachgeben nach dem Motto &quot;okay, windows.h definiert das Makro max, dem muss ich rechnugn tragen&quot;, aber wenn du so anfängst kommt bald eine bestimmt sehr nützliche Bibliothek, die in ihren Headern vielleicht folgendes stehen hat:</p>
<pre><code>#ifndef OHNOEZ
  #define pair 2
  #define vector int[3]
  #define string const char*
  #define if( arg ) maybe( (arg) )
  #define cout (printf(&quot;ich mach dir alles kaputt!&quot;), cerr)
#endif
</code></pre>
<p>Worauf ich hinauswill: mach dir nicht überflüssige Arbeit, nur weil unter Umständen jemand ausversehen ein Makro definiert haben könnte das genauso heißt wie eine Funktion die im Standard vorhanden ist. Es ist nicht deine Aufgabe das wieder gut zu machen. Es ist Aufgabe des makro-Herstellers, seine Kreation möglichst vor der Publizierung zu entsorgen*, bzw. Aufgabe des Klienten, äußerst vorsichtig mit solchen Biblotheken umzugehen.</p>
<p>_____________________<br />
* ich weiß dass windows.h eine C-API ist und mit Standard-C++ daher nichts am Hut haben muss. Umso schlimmer dass alle Welt immernoch fröhlich und ungeschützt die Makrohölle in ihre C++-Codes importiert. Gibts keinen C++ windows.h-Wrapper?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1575911</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1575911</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 03 Sep 2008 13:41:57 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit numerical_limits&amp;lt;int&amp;gt;::max() on Wed, 03 Sep 2008 13:52:19 GMT]]></title><description><![CDATA[<p>Mein erster Vorschlag bestand darin, eine intelligente Fehlermeldung zu produzieren (und das ist auch das Einzige, was ich selbst tun würde - wenn überhaupt).<br />
Grundsätzlich ist es richtig, dass man nicht mit jedem Unfug, den man vor Einbinden des Headers machen kann, umgehen können muss. Praktisch stellt sich aber eher die Frage, ob es in bestimmten bekannten Fällen zuviel verlangt ist. Da eine solche Überprüfung in jedem einzelnen Header die Wartbarkeit nicht fördert, ist sie eher etwas für einen zentralen Konfigurationsheader, den man im Falle einer etwas umfangreicheren Bibliothek ohnehin oft hat, um sich auf das konkrete System, für das kompiliert wird, einzustellen (natürlich muss man sich auch dabei intelligent anstellen: die Überprüfung darf nicht durch include-Guards geschützt sein).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1575919</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1575919</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 03 Sep 2008 13:52:19 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit numerical_limits&amp;lt;int&amp;gt;::max() on Wed, 03 Sep 2008 14:24:42 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>es gibt sogar Compiler (Microsoft/g++), die die <em>#pragma</em>s <em>push_macro/pop_macro</em> kennen:</p>
<p><a href="http://msdn.microsoft.com/en-us/library/2bs04eza(VS.80).aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/2bs04eza(VS.80).aspx</a></p>
<p>MfG,</p>
<p>Probe-Nutzer</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1575927</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1575927</guid><dc:creator><![CDATA[Probe-Nutzer]]></dc:creator><pubDate>Wed, 03 Sep 2008 14:24:42 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit numerical_limits&amp;lt;int&amp;gt;::max() on Wed, 03 Sep 2008 15:34:24 GMT]]></title><description><![CDATA[<p>das scheint ja genau das zu sein was ich suche, leider functioniert das pop_macro irgend wie nich:</p>
<pre><code class="language-cpp">#ifdef min
#  pragma push_macro(&quot;min&quot;)
#  undef min
#  define popmin
#endif
#ifdef max
#  pragma push_macro(&quot;max&quot;)
#  undef max
#  define popmax
#endif

  MyClass()
    :m_count(0)
    ,m_min(numeric_limits&lt;T&gt;::max())
    ,m_max(numeric_limits&lt;T&gt;::min())
    ,m_sum(0)            
  {};                    

  MyClass(T i)         
    :m_count(0)          
    ,m_min(numeric_limits&lt;T&gt;::max())
    ,m_max(numeric_limits&lt;T&gt;::min())
    ,m_sum(0)
  {
    operator=(i);
  };

#ifdef popmax
#  pragma pop_macro(&quot;max&quot;)
#  undef popmax
#endif
#ifdef popmin
#  pragma pop_macro(&quot;min&quot;)
#  undef popmin
#endif
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1575990</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1575990</guid><dc:creator><![CDATA[vlad_tepesch]]></dc:creator><pubDate>Wed, 03 Sep 2008 15:34:24 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit numerical_limits&amp;lt;int&amp;gt;::max() on Wed, 03 Sep 2008 16:35:17 GMT]]></title><description><![CDATA[<p>Probe-Nutzer schrieb:</p>
<blockquote>
<p>Hallo,</p>
<p>es gibt sogar Compiler (Microsoft/g++), die die <em>#pragma</em>s <em>push_macro/pop_macro</em> kennen:</p>
<p><a href="http://msdn.microsoft.com/en-us/library/2bs04eza(VS.80).aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/2bs04eza(VS.80).aspx</a></p>
<p>MfG,</p>
<p>Probe-Nutzer</p>
</blockquote>
<p>In der gcc-Dokumentation kann ich nichts dazu finden. Die MSDN-Beschreibung lässt darauf schließen, dass das Ganze nur für Objektmakros funktioniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576015</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576015</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 03 Sep 2008 16:35:17 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit numerical_limits&amp;lt;int&amp;gt;::max() on Wed, 03 Sep 2008 16:41:23 GMT]]></title><description><![CDATA[<p>Wenn man die Makros nicht einfach <em>#undef</em>en kann (ja das kommt vor), geht auch folgende Methode (auch wenns nicht mehr ganz so schön aussieht):</p>
<pre><code class="language-cpp">#define NO_MACRO 

  MyClass()
    :m_count(0)
    ,m_min(numeric_limits&lt;T&gt;::max NO_MACRO ())
    ,m_max(numeric_limits&lt;T&gt;::min NO_MACRO ())
    ,m_sum(0)            
  {};                    

  MyClass(T i)        
    :m_count(0)          
    ,m_min(numeric_limits&lt;T&gt;::max NO_MACRO ())
    ,m_max(numeric_limits&lt;T&gt;::min NO_MACRO ())
    ,m_sum(0)
  {
    operator=(i);
  };
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1576021</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576021</guid><dc:creator><![CDATA[DerKuchen]]></dc:creator><pubDate>Wed, 03 Sep 2008 16:41:23 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit numerical_limits&amp;lt;int&amp;gt;::max() on Thu, 04 Sep 2008 07:48:55 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18587">@derkuchen</a><br />
danke, es ist zwar wirklich nicht mehr so schön, aber das löst das Problem auf sicherste und unkomplizierteste weise.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576275</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576275</guid><dc:creator><![CDATA[vlad_tepesch]]></dc:creator><pubDate>Thu, 04 Sep 2008 07:48:55 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit numerical_limits&amp;lt;int&amp;gt;::max() on Thu, 04 Sep 2008 08:33:24 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Probe-Nutzer schrieb:</p>
<blockquote>
<p>Hallo,</p>
<p>es gibt sogar Compiler (Microsoft/g++), die die <em>#pragma</em>s <em>push_macro/pop_macro</em> kennen:</p>
<p><a href="http://msdn.microsoft.com/en-us/library/2bs04eza(VS.80).aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/2bs04eza(VS.80).aspx</a></p>
<p>MfG,</p>
<p>Probe-Nutzer</p>
</blockquote>
<p>In der gcc-Dokumentation kann ich nichts dazu finden.</p>
</blockquote>
<p>Ich habe irgendwo für gcc geschriebenen Code gesehen, der das verwendet, und ich habe jetzt auch noch einmal gesucht, und das hier:</p>
<p><a href="http://gcc.gnu.org/onlinedocs/gcc/Push_002fPop-Macro-Pragmas.html" rel="nofollow">http://gcc.gnu.org/onlinedocs/gcc/Push_002fPop-Macro-Pragmas.html</a></p>
<p>gefunden.</p>
<p>camper schrieb:</p>
<blockquote>
<p>Die MSDN-Beschreibung lässt darauf schließen, dass das Ganze nur für Objektmakros funktioniert.</p>
</blockquote>
<p>Siehe unten.</p>
<p>vlad_tepesch schrieb:</p>
<blockquote>
<p>das scheint ja genau das zu sein was ich suche, leider functioniert das pop_macro irgend wie nich:</p>
<pre><code class="language-cpp">#ifdef min
#  pragma push_macro(&quot;min&quot;)
#  undef min
#  define popmin
#endif
#ifdef max
#  pragma push_macro(&quot;max&quot;)
#  undef max
#  define popmax
#endif

  MyClass()
    :m_count(0)
    ,m_min(numeric_limits&lt;T&gt;::max())
    ,m_max(numeric_limits&lt;T&gt;::min())
    ,m_sum(0)            
  {};                    

  MyClass(T i)         
    :m_count(0)          
    ,m_min(numeric_limits&lt;T&gt;::max())
    ,m_max(numeric_limits&lt;T&gt;::min())
    ,m_sum(0)
  {
    operator=(i);
  };

#ifdef popmax
#  pragma pop_macro(&quot;max&quot;)
#  undef popmax
#endif
#ifdef popmin
#  pragma pop_macro(&quot;min&quot;)
#  undef popmin
#endif
</code></pre>
</blockquote>
<p>Ich habe das, an dein Beispiel angelehnt, mit dem VS2005, Service Pack 1, versucht:</p>
<pre><code class="language-cpp">#include &lt;limits&gt;
#include &lt;iostream&gt;
#include &lt;windows.h&gt;

using namespace std;

#ifdef min 
#  pragma push_macro(&quot;min&quot;) 
#  undef min 
#  define popmin 
#endif 
#ifdef max 
#  pragma push_macro(&quot;max&quot;) 
#  undef max 
#  define popmax 
#endif

template&lt;class T&gt; class MyClass
{
public:
  MyClass() 
    :m_count(0) 
    ,m_min(numeric_limits&lt;T&gt;::max()) 
    ,m_max(numeric_limits&lt;T&gt;::min()) 
    ,m_sum(0)             
  {};                     

  MyClass(T i)         
    :m_count(0)           
    ,m_min(numeric_limits&lt;T&gt;::max()) 
    ,m_max(numeric_limits&lt;T&gt;::min()) 
    ,m_sum(0) 
  { 
    operator=(i); 
  };

private:
	int m_sum;
	int m_min;
	int m_max;
	int m_count;
};

#ifdef popmax 
#  pragma pop_macro(&quot;max&quot;) 
#  undef popmax 
#endif 
#ifdef popmin 
#  pragma pop_macro(&quot;min&quot;) 
#  undef popmin 
#endif

int main(int argc, char* argv[])
{
	int a = 6;
	int b = 7;
	MyClass&lt;int&gt; test;
    MyClass&lt;int&gt; test2;

	cout &lt;&lt; max(a, b) &lt;&lt; endl;

	return 0;
}
</code></pre>
<p>und es funktioniert.</p>
<p>MfG,</p>
<p>Probe-Nutzer</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576302</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576302</guid><dc:creator><![CDATA[Probe-Nutzer]]></dc:creator><pubDate>Thu, 04 Sep 2008 08:33:24 GMT</pubDate></item></channel></rss>