<?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[Spezialisierung eins template operators in den globalen namespace importieren]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe eine template Funktion und einen template Operator in einem namespace:</p>
<pre><code>namespace detail
{
  template &lt;typename T&gt;
  T func(T t)
  {
    return t;
  }

  template &lt;typename T&gt;
  T operator~(T t)
  {
    return t;
  }
}
</code></pre>
<p>Beides möchte ich spezialisiert für ein scoped Enum in den globalen namespace importieren:</p>
<pre><code>enum class type
{
};

type (&amp;func)(type t) = detail::func&lt;type&gt;;
type (&amp;operator~)(type t) = detail::operator~&lt;type&gt;;
</code></pre>
<p>Bei der Funktion funktioniert das auch wunderbar, jedoch bekomme ich bei dem Operator folgende Fehlermeldung:</p>
<pre><code>% g++ -std=c++11 test.cpp &amp;&amp; ./a.out
test.cpp:21:25: error: declaration of ‘operator~’ as non-function
 type (&amp;operator~)(type t) = detail::operator~&lt;type&gt;;
</code></pre>
<p>Offenbar geht das so nicht. Mache ich etwas falsch oder gibt es vielleicht noch eine andere Möglichkeit?</p>
<p>Vielen Dank im Voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/327756/spezialisierung-eins-template-operators-in-den-globalen-namespace-importieren</link><generator>RSS for Node</generator><lastBuildDate>Wed, 08 Jul 2026 23:53:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/327756.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 02 Sep 2014 11:19:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Spezialisierung eins template operators in den globalen namespace importieren on Tue, 02 Sep 2014 11:19:46 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe eine template Funktion und einen template Operator in einem namespace:</p>
<pre><code>namespace detail
{
  template &lt;typename T&gt;
  T func(T t)
  {
    return t;
  }

  template &lt;typename T&gt;
  T operator~(T t)
  {
    return t;
  }
}
</code></pre>
<p>Beides möchte ich spezialisiert für ein scoped Enum in den globalen namespace importieren:</p>
<pre><code>enum class type
{
};

type (&amp;func)(type t) = detail::func&lt;type&gt;;
type (&amp;operator~)(type t) = detail::operator~&lt;type&gt;;
</code></pre>
<p>Bei der Funktion funktioniert das auch wunderbar, jedoch bekomme ich bei dem Operator folgende Fehlermeldung:</p>
<pre><code>% g++ -std=c++11 test.cpp &amp;&amp; ./a.out
test.cpp:21:25: error: declaration of ‘operator~’ as non-function
 type (&amp;operator~)(type t) = detail::operator~&lt;type&gt;;
</code></pre>
<p>Offenbar geht das so nicht. Mache ich etwas falsch oder gibt es vielleicht noch eine andere Möglichkeit?</p>
<p>Vielen Dank im Voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2415799</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2415799</guid><dc:creator><![CDATA[Importeur]]></dc:creator><pubDate>Tue, 02 Sep 2014 11:19:46 GMT</pubDate></item><item><title><![CDATA[Reply to Spezialisierung eins template operators in den globalen namespace importieren on Tue, 02 Sep 2014 11:34:04 GMT]]></title><description><![CDATA[<blockquote>
<p>Offenbar geht das so nicht.</p>
</blockquote>
<p>Nein, leider nicht. Du musst den Operator für <code>type</code> überladen:</p>
<pre><code>type operator~(type t)
  {
    return detail::operator~(t);
  }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2415802</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2415802</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Tue, 02 Sep 2014 11:34:04 GMT</pubDate></item><item><title><![CDATA[Reply to Spezialisierung eins template operators in den globalen namespace importieren on Tue, 02 Sep 2014 11:39:57 GMT]]></title><description><![CDATA[<p>Importeur schrieb:</p>
<blockquote>
<p>Beides möchte ich spezialisiert für ein scoped Enum in den globalen namespace importieren:</p>
<pre><code>enum class type
{
};

type (&amp;func)(type t) = detail::func&lt;type&gt;;
type (&amp;operator~)(type t) = detail::operator~&lt;type&gt;;
</code></pre>
</blockquote>
<p>Interessante Idee. Allerdings würde func nicht per ADL gefunden werden können, was ggf. später für Überraschungen sorgt. Und operator-ids können nur für Funktionen verwendet werden, nicht Variablen.</p>
<p>Unproblematisch wäre es, einfach Funktionen zu schreiben, die deligieren.</p>
<pre><code class="language-cpp">auto func(type t) { return detail::func(t); }
auto operator~(type t) { return detail::operator~(t); }
</code></pre>
<p>evtl. kommen auch using-Deklarationen in Betracht, die sind dann aber nicht auf eine einzelne Spezialisierung beschränkt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2415804</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2415804</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 02 Sep 2014 11:39:57 GMT</pubDate></item><item><title><![CDATA[Reply to Spezialisierung eins template operators in den globalen namespace importieren on Tue, 02 Sep 2014 11:41:34 GMT]]></title><description><![CDATA[<blockquote>
<p>kommen auch using-Deklarationen in Betracht.</p>
</blockquote>
<p>Nein, <code>using</code> -Deklarationen können nur unqualified-ids in Namensräumen nennen, nicht Spezialisierungen von Templates.</p>
<p>Explizite Instantiierungen gehen leider auch nicht da diese im selben Namensraum stehen müssen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2415805</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2415805</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Tue, 02 Sep 2014 11:41:34 GMT</pubDate></item></channel></rss>