<?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[gcc - base class &#x27;foo&#x27; has a non-virtual destructor]]></title><description><![CDATA[<p>hallo,</p>
<p>ich suche eine möglichkeit; am besten ohne <code>#pragma</code> oder ähnliche compiler-spezifische direktiven; die warning zu deaktivieren<br />
(deshalb im c++-forum und nicht im compiler-forum)</p>
<pre><code class="language-cpp">struct foo
{

};
struct bar : foo
{

};

int main() {}
</code></pre>
<p>nutzen tu ich das ganze für einen wrapper; ähnlich zu boost::strong_typedef (nur eben kein makro):</p>
<pre><code class="language-cpp">template&lt;class TYPE_DEF, class NUM_TYPE&gt;
struct wrapper
{
    wrapper(NUM_TYPE value_) : value(value_) {}

    operator NUM_TYPE() const {return value;}
    operator bool() const {return value != 0;}

    template&lt;class T&gt;
    friend bool operator==(TYPE_DEF lhs, T rhs) {return lhs.value == NUM_TYPE(rhs);}
    template&lt;class T&gt;
    friend bool operator!=(TYPE_DEF lhs, T rhs) {return lhs.value != NUM_TYPE(rhs);}

    template&lt;class T&gt;
    friend bool operator&lt; (TYPE_DEF lhs, T rhs) {return lhs.value &lt;  NUM_TYPE(rhs);}
    template&lt;class T&gt;
    friend bool operator&lt;=(TYPE_DEF lhs, T rhs) {return lhs.value &lt;= NUM_TYPE(rhs);}
    template&lt;class T&gt;
    friend bool operator&gt;=(TYPE_DEF lhs, T rhs) {return lhs.value &gt;= NUM_TYPE(rhs);}
    template&lt;class T&gt;
    friend bool operator&gt; (TYPE_DEF lhs, T rhs) {return lhs.value &gt;  NUM_TYPE(rhs);}

    template&lt;class T&gt;
    friend NUM_TYPE operator%(TYPE_DEF lhs, T rhs) {return lhs.value % NUM_TYPE(rhs);}

    template&lt;class S&gt;
    friend S&amp; operator&lt;&lt;(S&amp; s, TYPE_DEF rhs) {return s &lt;&lt; rhs.value;}
private:
    NUM_TYPE value;
};

struct special_int : wrapper&lt;special_int, int&gt;
{
    special_int(int value_ = 0) : wrapper&lt;special_int, int&gt;(value_) {}
    /*...funktionen - deshalb ist auch BOOST_STRONG_TYPEDEF(int, special_int) keine alternative...*/
};
</code></pre>
<p>nur wegen einer warning foo(wrapper) einen virtuellen dtor zu verpassen, ist keine option.</p>
<p>danke im voraus</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/309189/gcc-base-class-foo-has-a-non-virtual-destructor</link><generator>RSS for Node</generator><lastBuildDate>Wed, 05 Aug 2026 12:09:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/309189.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 16 Oct 2012 14:10:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to gcc - base class &#x27;foo&#x27; has a non-virtual destructor on Tue, 16 Oct 2012 14:10:31 GMT]]></title><description><![CDATA[<p>hallo,</p>
<p>ich suche eine möglichkeit; am besten ohne <code>#pragma</code> oder ähnliche compiler-spezifische direktiven; die warning zu deaktivieren<br />
(deshalb im c++-forum und nicht im compiler-forum)</p>
<pre><code class="language-cpp">struct foo
{

};
struct bar : foo
{

};

int main() {}
</code></pre>
<p>nutzen tu ich das ganze für einen wrapper; ähnlich zu boost::strong_typedef (nur eben kein makro):</p>
<pre><code class="language-cpp">template&lt;class TYPE_DEF, class NUM_TYPE&gt;
struct wrapper
{
    wrapper(NUM_TYPE value_) : value(value_) {}

    operator NUM_TYPE() const {return value;}
    operator bool() const {return value != 0;}

    template&lt;class T&gt;
    friend bool operator==(TYPE_DEF lhs, T rhs) {return lhs.value == NUM_TYPE(rhs);}
    template&lt;class T&gt;
    friend bool operator!=(TYPE_DEF lhs, T rhs) {return lhs.value != NUM_TYPE(rhs);}

    template&lt;class T&gt;
    friend bool operator&lt; (TYPE_DEF lhs, T rhs) {return lhs.value &lt;  NUM_TYPE(rhs);}
    template&lt;class T&gt;
    friend bool operator&lt;=(TYPE_DEF lhs, T rhs) {return lhs.value &lt;= NUM_TYPE(rhs);}
    template&lt;class T&gt;
    friend bool operator&gt;=(TYPE_DEF lhs, T rhs) {return lhs.value &gt;= NUM_TYPE(rhs);}
    template&lt;class T&gt;
    friend bool operator&gt; (TYPE_DEF lhs, T rhs) {return lhs.value &gt;  NUM_TYPE(rhs);}

    template&lt;class T&gt;
    friend NUM_TYPE operator%(TYPE_DEF lhs, T rhs) {return lhs.value % NUM_TYPE(rhs);}

    template&lt;class S&gt;
    friend S&amp; operator&lt;&lt;(S&amp; s, TYPE_DEF rhs) {return s &lt;&lt; rhs.value;}
private:
    NUM_TYPE value;
};

struct special_int : wrapper&lt;special_int, int&gt;
{
    special_int(int value_ = 0) : wrapper&lt;special_int, int&gt;(value_) {}
    /*...funktionen - deshalb ist auch BOOST_STRONG_TYPEDEF(int, special_int) keine alternative...*/
};
</code></pre>
<p>nur wegen einer warning foo(wrapper) einen virtuellen dtor zu verpassen, ist keine option.</p>
<p>danke im voraus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2261031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2261031</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Tue, 16 Oct 2012 14:10:31 GMT</pubDate></item><item><title><![CDATA[Reply to gcc - base class &#x27;foo&#x27; has a non-virtual destructor on Tue, 16 Oct 2012 14:20:45 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template&lt;class, class&gt;
struct wrapper
{ 
  /* ... */
protected:
  ~wrapper() {};
};
</code></pre>
<p>Stellt ihn das ruhig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2261035</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2261035</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 16 Oct 2012 14:20:45 GMT</pubDate></item><item><title><![CDATA[Reply to gcc - base class &#x27;foo&#x27; has a non-virtual destructor on Tue, 16 Oct 2012 14:34:16 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<pre><code class="language-cpp">struct bar : foo
</code></pre>
</blockquote>
<p>Keine Ahnung, ob das hilft, aber an der Stelle zuckte mein linkes Auge.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2261040</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2261040</guid><dc:creator><![CDATA[Xin]]></dc:creator><pubDate>Tue, 16 Oct 2012 14:34:16 GMT</pubDate></item><item><title><![CDATA[Reply to gcc - base class &#x27;foo&#x27; has a non-virtual destructor on Tue, 16 Oct 2012 15:09:00 GMT]]></title><description><![CDATA[<p>Xin schrieb:</p>
<blockquote>
<p>&lt;trolling&gt;</p>
</blockquote>
<p>pumuckl schrieb:</p>
<blockquote>
<pre><code class="language-cpp">template&lt;class, class&gt;
struct wrapper
{ 
  /* ... */
protected:
  ~wrapper() {};
};
</code></pre>
<p>Stellt ihn das ruhig?</p>
</blockquote>
<p>ne, bringt nichts.</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2261049</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2261049</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Tue, 16 Oct 2012 15:09:00 GMT</pubDate></item><item><title><![CDATA[Reply to gcc - base class &#x27;foo&#x27; has a non-virtual destructor on Tue, 16 Oct 2012 15:18:38 GMT]]></title><description><![CDATA[<p>Das ist eine -Weffc++ Warnung.<br />
Das sind keine Warnung im Sinne von &quot;Achtung da passiert was gefährliches&quot; sondern einfach eine Verletzung der Guidelines aus Effective C++.</p>
<p>Das ist zwar nett zum mal drüber schauen über den Code, aber diese Warnungen sind zu &quot;dumm&quot; um wirklich etwas zu bringen. Einfach nicht einschalten und schon ist das Problem gelöst.</p>
<p>Die Doku sagt btw folgendes:</p>
<blockquote>
<p>When selecting this option, be aware that the standard library headers do not obey all of these guidelines; use `grep -v' to filter out those warnings.</p>
</blockquote>
<p>PS:<br />
sprich: selbst 100% korrekter Code kann diese Warnungen generieren und man kann nichts dagegen tun.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2261054</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2261054</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Tue, 16 Oct 2012 15:18:38 GMT</pubDate></item><item><title><![CDATA[Reply to gcc - base class &#x27;foo&#x27; has a non-virtual destructor on Tue, 16 Oct 2012 15:43:28 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>Die Doku sagt btw folgendes:</p>
<blockquote>
<p>When selecting this option, be aware that the standard library headers do not obey all of these guidelines; use `grep -v' to filter out those warnings.</p>
</blockquote>
<p>PS:<br />
sprich: selbst 100% korrekter Code kann diese Warnungen generieren und man kann nichts dagegen tun.</p>
</blockquote>
<p>überzeugt - danke^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2261060</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2261060</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Tue, 16 Oct 2012 15:43:28 GMT</pubDate></item></channel></rss>