<?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[Ambiguous call bei Funktionstemplate Deklaration + Definition]]></title><description><![CDATA[<p>Vielleicht sieht einer von euch, wieso der Kompiler mir hier ein &quot;Ambiguous Call&quot; an den Kopf wirft. Ich geh gleich essen und habe aktuell nicht die leiseste Ahnung, wieso der Fehler kommt <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>
<pre><code class="language-cpp">namespace mll {

// ...

namespace manager {

	// ...

	template&lt;typename ObjectT&gt;
	std::pair
	&lt;
		typename ObjectManager&lt;ObjectT&gt;::HouseIterator,
		typename ObjectManager&lt;ObjectT&gt;::HouseIterator
	&gt;
	get_house_range(ObjectID houseID);

} } // mll::manager

//////////////////////////////////////////////////////////////////////////
// Templates implementation

namespace mll {

// ...

namespace manager {

	// ...

	template&lt;typename ObjectT&gt;
	std::pair
	&lt;
		typename ObjectManager&lt;ObjectT&gt;::HouseIterator,
		typename ObjectManager&lt;ObjectT&gt;::HouseIterator
	&gt;
	get_house_range(ObjectID houseID)
	{
		mll::ObjectManager&lt;ObjectT&gt; const&amp; m
			= mll::ObjectManager&lt;ObjectT&gt;::get_const_instance();

		return m.get_house_range(houseID);
	}

} } // mll::manager
</code></pre>
<pre><code class="language-cpp">// Irgendwo anders:
mll::manager::get_house_range&lt;mll::Flat&gt;(0);
</code></pre>
<p><strong>BUMM</strong></p>
<pre><code>1&gt;c:\...\irgendwoanders.hpp(77) : error C2668: 'mll::manager::get_house_range' : ambiguous call to overloaded function
1&gt;        c:\...\objectmanager.hpp(380): could be 'std::pair&lt;_Ty1,_Ty2&gt; mll::manager::get_house_range&lt;mll::Flat&gt;(mll::ObjectID)'
1&gt;        with
1&gt;        [
1&gt;            _Ty1=boost::multi_index::detail::bidir_node_iterator&lt;boost::multi_index::detail::ordered_index_node&lt;boost::multi_index::detail::index_node_base&lt;mll::Flat,std::allocator&lt;mll::Flat&gt;&gt;&gt;&gt;,
1&gt;            _Ty2=boost::multi_index::detail::bidir_node_iterator&lt;boost::multi_index::detail::ordered_index_node&lt;boost::multi_index::detail::index_node_base&lt;mll::Flat,std::allocator&lt;mll::Flat&gt;&gt;&gt;&gt;
1&gt;        ]
1&gt;        c:\...\objectmanager.hpp(128): or       'std::pair&lt;_Ty1,_Ty2&gt; mll::manager::get_house_range&lt;mll::Flat&gt;(mll::ObjectID)'
1&gt;        with
1&gt;        [
1&gt;            _Ty1=boost::multi_index::detail::bidir_node_iterator&lt;boost::multi_index::detail::ordered_index_node&lt;boost::multi_index::detail::index_node_base&lt;mll::Flat,std::allocator&lt;mll::Flat&gt;&gt;&gt;&gt;,
1&gt;            _Ty2=boost::multi_index::detail::bidir_node_iterator&lt;boost::multi_index::detail::ordered_index_node&lt;boost::multi_index::detail::index_node_base&lt;mll::Flat,std::allocator&lt;mll::Flat&gt;&gt;&gt;&gt;
1&gt;        ]
1&gt;        while trying to match the argument list '(int)'
</code></pre>
<p><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="😮"
    /><br />
Was zum Geier überseh ich?</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/236696/ambiguous-call-bei-funktionstemplate-deklaration-definition</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 16:49:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/236696.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 18 Mar 2009 17:39:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Ambiguous call bei Funktionstemplate Deklaration + Definition on Wed, 18 Mar 2009 17:39:48 GMT]]></title><description><![CDATA[<p>Vielleicht sieht einer von euch, wieso der Kompiler mir hier ein &quot;Ambiguous Call&quot; an den Kopf wirft. Ich geh gleich essen und habe aktuell nicht die leiseste Ahnung, wieso der Fehler kommt <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>
<pre><code class="language-cpp">namespace mll {

// ...

namespace manager {

	// ...

	template&lt;typename ObjectT&gt;
	std::pair
	&lt;
		typename ObjectManager&lt;ObjectT&gt;::HouseIterator,
		typename ObjectManager&lt;ObjectT&gt;::HouseIterator
	&gt;
	get_house_range(ObjectID houseID);

} } // mll::manager

//////////////////////////////////////////////////////////////////////////
// Templates implementation

namespace mll {

// ...

namespace manager {

	// ...

	template&lt;typename ObjectT&gt;
	std::pair
	&lt;
		typename ObjectManager&lt;ObjectT&gt;::HouseIterator,
		typename ObjectManager&lt;ObjectT&gt;::HouseIterator
	&gt;
	get_house_range(ObjectID houseID)
	{
		mll::ObjectManager&lt;ObjectT&gt; const&amp; m
			= mll::ObjectManager&lt;ObjectT&gt;::get_const_instance();

		return m.get_house_range(houseID);
	}

} } // mll::manager
</code></pre>
<pre><code class="language-cpp">// Irgendwo anders:
mll::manager::get_house_range&lt;mll::Flat&gt;(0);
</code></pre>
<p><strong>BUMM</strong></p>
<pre><code>1&gt;c:\...\irgendwoanders.hpp(77) : error C2668: 'mll::manager::get_house_range' : ambiguous call to overloaded function
1&gt;        c:\...\objectmanager.hpp(380): could be 'std::pair&lt;_Ty1,_Ty2&gt; mll::manager::get_house_range&lt;mll::Flat&gt;(mll::ObjectID)'
1&gt;        with
1&gt;        [
1&gt;            _Ty1=boost::multi_index::detail::bidir_node_iterator&lt;boost::multi_index::detail::ordered_index_node&lt;boost::multi_index::detail::index_node_base&lt;mll::Flat,std::allocator&lt;mll::Flat&gt;&gt;&gt;&gt;,
1&gt;            _Ty2=boost::multi_index::detail::bidir_node_iterator&lt;boost::multi_index::detail::ordered_index_node&lt;boost::multi_index::detail::index_node_base&lt;mll::Flat,std::allocator&lt;mll::Flat&gt;&gt;&gt;&gt;
1&gt;        ]
1&gt;        c:\...\objectmanager.hpp(128): or       'std::pair&lt;_Ty1,_Ty2&gt; mll::manager::get_house_range&lt;mll::Flat&gt;(mll::ObjectID)'
1&gt;        with
1&gt;        [
1&gt;            _Ty1=boost::multi_index::detail::bidir_node_iterator&lt;boost::multi_index::detail::ordered_index_node&lt;boost::multi_index::detail::index_node_base&lt;mll::Flat,std::allocator&lt;mll::Flat&gt;&gt;&gt;&gt;,
1&gt;            _Ty2=boost::multi_index::detail::bidir_node_iterator&lt;boost::multi_index::detail::ordered_index_node&lt;boost::multi_index::detail::index_node_base&lt;mll::Flat,std::allocator&lt;mll::Flat&gt;&gt;&gt;&gt;
1&gt;        ]
1&gt;        while trying to match the argument list '(int)'
</code></pre>
<p><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="😮"
    /><br />
Was zum Geier überseh ich?</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1682353</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1682353</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 18 Mar 2009 17:39:48 GMT</pubDate></item><item><title><![CDATA[Reply to Ambiguous call bei Funktionstemplate Deklaration + Definition on Wed, 18 Mar 2009 19:28:45 GMT]]></title><description><![CDATA[<p>Ok, hab mich voll gefressen, den Fehler finde ich immer noch nicht. Die Funktionsköpfe sind absolut identisch, nachgeprüft durch ein Copy&amp;Paste. Bekomme aber immer noch den Fehler. Es sollte doch grundsätzlich eine Deklaration und Definition geben und nicht eine doppelte Definition ... Also nix mit &quot;Ambiguous Call&quot;, zumindest in meiner Theorie <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>Wenn ich den Rückgabewert durch z.B. <code>void</code> ersetze, dann funktioniert es. Das wirft bei mir aber eher noch mehr Fragezeichen auf, als es Antworten bringt... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1682419</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1682419</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 18 Mar 2009 19:28:45 GMT</pubDate></item><item><title><![CDATA[Reply to Ambiguous call bei Funktionstemplate Deklaration + Definition on Wed, 18 Mar 2009 19:51:08 GMT]]></title><description><![CDATA[<p>Puh, kann grad nur raten weil kein Compiler zur hand ums zu überprüfen: versuch aus der Definition mal folgendes zu machen:</p>
<pre><code class="language-cpp">get_house_range&lt;ObjectT&gt;(ObjectID houseID)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1682434</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1682434</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 18 Mar 2009 19:51:08 GMT</pubDate></item><item><title><![CDATA[Reply to Ambiguous call bei Funktionstemplate Deklaration + Definition on Wed, 18 Mar 2009 20:37:27 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9960">@pumuckl</a>,<br />
Nein geht so nicht.</p>
<p>Das Schlimme ist, ich kann den Fehler nicht mal reproduzieren mit anderem Code. Es geht nur mit meinem speziellen Code. Ich kriege nicht heraus, woran es liegt. *sich die Haare ausreisst*</p>
<p>Werde noch ein wenig weiter rumprobieren.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1682453</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1682453</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 18 Mar 2009 20:37:27 GMT</pubDate></item><item><title><![CDATA[Reply to Ambiguous call bei Funktionstemplate Deklaration + Definition on Wed, 18 Mar 2009 20:48:55 GMT]]></title><description><![CDATA[<p>tja, mach ne neue Datei auf und copy&amp;paste den Code stück für stück da rein und compilere - irgendwo auf dem Weg passierts dann <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/1682455</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1682455</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 18 Mar 2009 20:48:55 GMT</pubDate></item><item><title><![CDATA[Reply to Ambiguous call bei Funktionstemplate Deklaration + Definition on Wed, 18 Mar 2009 21:07:43 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>tja, mach ne neue Datei auf und copy&amp;paste den Code stück für stück da rein und compilere - irgendwo auf dem Weg passierts dann <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>
</blockquote>
<p>Bleibt mir wohl nichts anderes übrig, aber das mach ich dann morgen. Irgendwie beschleicht mich aber so langsam das Gefühl, dass es nur ein Kompilerfehler ist. Ich hoffe es aber nicht, ich hoffe es ist wie immer nur ein Fehler des dummen Programmierers <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üssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1682468</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1682468</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 18 Mar 2009 21:07:43 GMT</pubDate></item><item><title><![CDATA[Reply to Ambiguous call bei Funktionstemplate Deklaration + Definition on Thu, 19 Mar 2009 15:37:57 GMT]]></title><description><![CDATA[<p>Hmmm, das macht keinen Sinn <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>Wenn ich das <code>template&lt;typename ObjectT&gt;</code> wegnehme und alle <code>ObjectT</code> durch das Objekt direkt ersetze, gehts.<br />
Es scheint zudem nur am Rückgabewert zu liegen, aber der kann ja kein &quot;Ambiguous Call&quot; auslösen.</p>
<p>Ich habe den Code mal ein wenig zusammengefasst, so dass ihr, wenn ihr Lust dazu habt, den Fehler anschauen könnt. Es sind leider allerdings immer noch etwas mehr wie 300 Zeilen.</p>
<p>Verwendeter Kompiler ist der MSVC 2008.</p>
<p><strong>Flat.hpp</strong></p>
<pre><code class="language-cpp">//////////////////////////////////////////////////////////////////////////
// Flat : Header file

#ifndef MLL_H_FLAT_GUARD__
#define MLL_H_FLAT_GUARD__

//#include &quot;ObjectID.hpp&quot;
typedef long ObjectID;

namespace mll {

	//////////////////////////////////////////////////////////////////////////
	// Flat

	class Flat
	{
		// Attributes //
	private:
		ObjectID m_id;
		ObjectID m_houseID;

		// Constructors &amp; Destructor //
	public:
		Flat(ObjectID id, ObjectID houseID)
			: m_id(id)
			, m_houseID(houseID)
		{};

		~Flat(){};

		// Methods //
	public:
		ObjectID get_id() const { return m_id; };
		ObjectID get_house_id() const { return m_houseID; };
	};

} // mll

#endif // MLL_H_FLAT_GUARD__
</code></pre>
<p><strong>ObjectManager.hpp</strong></p>
<pre><code class="language-cpp">//////////////////////////////////////////////////////////////////////////
// ObjectManager : Header file

#ifndef MLL_H_OBJECT_MANAGER_GUARD__
#define MLL_H_OBJECT_MANAGER_GUARD__

//#include &quot;ObjectID.hpp&quot;
typedef long ObjectID;

#include &lt;boost/serialization/singleton.hpp&gt;

#include &lt;boost/multi_index/mem_fun.hpp&gt;
#include &lt;boost/multi_index_container.hpp&gt;
#include &lt;boost/multi_index/indexed_by.hpp&gt;
#include &lt;boost/multi_index/ordered_index.hpp&gt;

#include &lt;utility&gt;

namespace mll {

	//////////////////////////////////////////////////////////////////////////
	// ObjectManager

	template
	&lt;
		typename ObjectT,
		ObjectID (ObjectT::*ID_FUNC)() const = &amp;ObjectT::get_id,
		ObjectID (ObjectT::*HOUSE_ID_FUNC)() const = &amp;ObjectT::get_house_id
	&gt;
	class ObjectManager
		: public boost::serialization::singleton&lt;ObjectManager
												 &lt;
													ObjectT,
													ID_FUNC,
													HOUSE_ID_FUNC
												 &gt; &gt;
	{
		// Typedefs //
	public:
		typedef ObjectT Object;

	private:
		typedef
			boost::multi_index_container
			&lt;
				Object,
				boost::multi_index::indexed_by
				&lt;
					boost::multi_index::ordered_unique
					&lt;
						boost::multi_index::const_mem_fun
						&lt;
							Object,
							ObjectID,
							ID_FUNC
						&gt;
					&gt;,
					boost::multi_index::ordered_non_unique
					&lt;
						boost::multi_index::const_mem_fun
						&lt;
							Object,
							ObjectID,
							HOUSE_ID_FUNC
						&gt;
					&gt;
				&gt;
			&gt;
			Container;

	public:
		typedef typename Container
			::nth_index&lt;1&gt;
			::type
			::const_iterator HouseIterator;

		// Attributes //
	private:
		Container m_container;

		// Constructors &amp; Destructor //
	public:
		ObjectManager();

		// Methods //
	public:
		std::pair&lt;HouseIterator, HouseIterator&gt;
		get_house_range(ObjectID houseID) const;
	};

	//////////////////////////////////////////////////////////////////////////
	// Free functions

namespace manager {

	template&lt;typename ObjectT&gt;
	std::pair
	&lt;
		typename ObjectManager&lt;ObjectT&gt;::HouseIterator,
		typename ObjectManager&lt;ObjectT&gt;::HouseIterator
	&gt;
	get_house_range(ObjectID houseID);

} } // mll::manager

//////////////////////////////////////////////////////////////////////////
// Templates implementation

namespace mll {

	//////////////////////////////////////////////////////////////////////////
	// ObjectManager

	/************************************************************************/
	/* Constructors                                                         */
	/************************************************************************/

	template
	&lt;
		typename ObjectT,
		ObjectID (ObjectT::*ID_FUNC)() const,
		ObjectID (ObjectT::*HOUSE_ID_FUNC)() const
	&gt;
	ObjectManager
	&lt;
		ObjectT,
		ID_FUNC,
		HOUSE_ID_FUNC
	&gt;
	::ObjectManager()
		: m_container()
	{
	}

	/************************************************************************/
	/* Methods                                                              */
	/************************************************************************/

	template
	&lt;
		typename ObjectT,
		ObjectID (ObjectT::*ID_FUNC)() const,
		ObjectID (ObjectT::*HOUSE_ID_FUNC)() const
	&gt;
	std::pair
	&lt;
		typename
		ObjectManager
		&lt;
			ObjectT,
			ID_FUNC,
			HOUSE_ID_FUNC
		&gt;
		::HouseIterator,
		typename
		ObjectManager
		&lt;
			ObjectT,
			ID_FUNC,
			HOUSE_ID_FUNC
		&gt;
		::HouseIterator
	&gt;
	ObjectManager
	&lt;
		ObjectT,
		ID_FUNC,
		HOUSE_ID_FUNC
	&gt;
	::get_house_range(ObjectID houseID) const
	{
		return m_container.get&lt;1&gt;().equal_range(houseID);
	}

	//////////////////////////////////////////////////////////////////////////
	// Free functions

namespace manager {

	template&lt;typename ObjectT&gt;
	std::pair
	&lt;
		typename ObjectManager&lt;ObjectT&gt;::HouseIterator,
		typename ObjectManager&lt;ObjectT&gt;::HouseIterator
	&gt;
	get_house_range(ObjectID houseID)
	{
		mll::ObjectManager&lt;ObjectT&gt; const&amp; m
			= mll::ObjectManager&lt;ObjectT&gt;::get_const_instance();

		return m.get_house_range(houseID);
	}

} } // mll::manager

#endif // MLL_H_OBJECT_MANAGER_GUARD__
</code></pre>
<p><strong>main.cpp</strong></p>
<pre><code class="language-cpp">//////////////////////////////////////////////////////////////////////////
// main : Implementation file

#include &quot;Flat.hpp&quot;
#include &quot;ObjectManager.hpp&quot;

int main()
{
	mll::manager::get_house_range&lt;mll::Flat&gt;(0);

	return 0;
}
</code></pre>
<p>Die einzige Lösung wäre aktuell ein Stilbruch. Müsste die Deklaration und Definition zusammenführen.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1682882</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1682882</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Thu, 19 Mar 2009 15:37:57 GMT</pubDate></item><item><title><![CDATA[Reply to Ambiguous call bei Funktionstemplate Deklaration + Definition on Thu, 19 Mar 2009 15:55:29 GMT]]></title><description><![CDATA[<p>Hmm, ich habs mal probiert, und den Code einfach mal der Reihe nach in ein File kopiert. Aus Gründen (die mir ebenfalls nicht klar sind), hält der die Deklaration und die Definition für unterschiedliche Funktionen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1682897</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1682897</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 19 Mar 2009 15:55:29 GMT</pubDate></item><item><title><![CDATA[Reply to Ambiguous call bei Funktionstemplate Deklaration + Definition on Thu, 19 Mar 2009 23:35:35 GMT]]></title><description><![CDATA[<p>Weiß nicht, ob das den Fehler behebt, aber hier fehlt ein <strong>template</strong>:</p>
<pre><code class="language-cpp">return m_container.get&lt;1&gt;().equal_range(houseID);
// should be -&gt;
return m_container.template get&lt;1&gt;().equal_range(houseID);
</code></pre>
<p>Wenn nach Zugriff auf einen Templatetyp auf ein weiteres Template zugegriffen wird, muss es mit template eingeleitet werden. Ansonsten wird das &lt; als kleine-Op interpretiert.</p>
<p>Edit: Hier scheint auch eins zu fehlen:</p>
<pre><code class="language-cpp">typedef typename Container
            ::nth_index&lt;1&gt;
            ::type
            ::const_iterator HouseIterator; 
// should be -&gt;
typedef typename Container
            ::template nth_index&lt;1&gt;
            ::type
            ::const_iterator HouseIterator;
</code></pre>
<p>Kanns leider nicht compilieren, obs nun klappt, da ich seltsamerweise kein boost/serialization/singleton.hpp drauf habe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1683110</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1683110</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 19 Mar 2009 23:35:35 GMT</pubDate></item><item><title><![CDATA[Reply to Ambiguous call bei Funktionstemplate Deklaration + Definition on Fri, 20 Mar 2009 02:37:17 GMT]]></title><description><![CDATA[<p>Naja das lässt sich schon noch wesentlich weiter zusammenschrumpfen:</p>
<pre><code class="language-cpp">#include &lt;vector&gt;

namespace mll { 

	class foo
	{ 
	public:
		static const int CI = 123;
		int bar() const { return 0; }
	};

	template 
	&lt; 
		typename T, 
 		int (T::*ID_FUNC)() const = &amp;T::bar,
 		int QUUX = T::CI,
		int Z = 123
	&gt; 
	class qux 
	{ 
	public: 
		typedef typename std::vector&lt;T&gt;::const_iterator iter;

		iter get2() const
		{
			return m_vec.begin(); 
		}

	private:
		std::vector&lt;T&gt; m_vec;
	}; 

	template&lt;typename T&gt; 
	typename qux&lt;T&gt;::iter get(); 

	template&lt;typename T&gt; 
	typename qux&lt;T&gt;::iter get()
	{ 
		mll::qux&lt;T&gt; m; 
		return m.get2();
	} 
}

////////////////////////////////////////////////////////////////////////// 

int main() 
{ 
	mll::get&lt;mll::foo&gt;(); 
	return 0; 
}
</code></pre>
<p>Scheint ein Compiler-Bug zu sein.<br />
Wenn man die zwei Zeilen</p>
<pre><code class="language-cpp">int (T::*ID_FUNC)() const = &amp;T::bar,
 		int QUUX = T::CI,
</code></pre>
<p>auskommentiert, dann geht's. Lässt man eine davon drinnen, geht's nichtmehr.</p>
<p>Wenn man beim Template Parameter QUUX den Default-Wert wegnimmt, und den Rest des Codes entsprechend anpasst, dann geht's. (Wenn man gleichzeitig die ID_FUNC Zeile auskommentiert, sonst natürlich nicht)</p>
<p>Wenn man dasselbe mit dem Template Parameter ID_FUNC versucht, geht es trotzdem nicht.</p>
<p>Irgendwo dürfte es da also 1) ein Problem mit Member-Function-Pointern als Template-Parameter geben. Und es dürfte 2) ein Problem mit Template-Parameter abhängigen Defaults für andere Template-Parameter geben.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9752">@Dravere</a>: Du übersiehst nichts, mach nen Bug-Report bei Microsoft!</p>
<p>p.S.: Workaround: lass die fwd-decl der Template-Funktion weg, und implementier sie gleich an Ort und Stelle.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1683121</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1683121</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 20 Mar 2009 02:37:17 GMT</pubDate></item><item><title><![CDATA[Reply to Ambiguous call bei Funktionstemplate Deklaration + Definition on Fri, 20 Mar 2009 10:52:04 GMT]]></title><description><![CDATA[<p>@KasF,<br />
Mit dem VC2008 nicht nötig. Sollte ich mir aber dringend angewöhnen, falls ich mal meinen Code mit einem anderen Kompiler kompilieren möchte <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><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13960">@hustbaer</a>,<br />
Hab es mehrmals probiert soweit zu verkleinern, aber da funktionierte es bei mir immer. Aber dein Beispiel funktioniert einwandfrei nicht <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>Das mit dem Zusammenführen von Deklaration und Definition habe ich ja bereits am Anfang hingeschrieben. Es wäre halt einfach ein Stilbruch und ich hasse Stilbrüche <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="🙂"
    /><br />
Ich glaube ich werde eher das <code>ID_FUNC</code> und <code>HOUSE_ID_FUNC</code> rausnehmen und die beiden Funktionen <code>get_id</code> und <code>get_house_id</code> einfach voraussetzen. Die Wahrscheinlichkeit ist sowieso extrem gering, dass sich da ein paar Klassen anders verhalten werden. War mehr eine übermässige Vorsicht und Sicherheit.</p>
<p>Den Bugreport würde ich ja gerne machen, wenn ich wüsste wo <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üssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1683275</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1683275</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 20 Mar 2009 10:52:04 GMT</pubDate></item><item><title><![CDATA[Reply to Ambiguous call bei Funktionstemplate Deklaration + Definition on Fri, 20 Mar 2009 11:10:22 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Den Bugreport würde ich ja gerne machen, wenn ich wüsste wo :)Grüssli</p>
</blockquote>
<p>Ein paar nette Erfahrungsberichte zum Thema:<br />
<a href="http://weblog.timaltman.com/archive/2006/03/22/reporting-bugs-microsoft" rel="nofollow">http://weblog.timaltman.com/archive/2006/03/22/reporting-bugs-microsoft</a><br />
<a href="http://www.oreillynet.com/mac/blog/2002/06/mission_impossible_submitting.html" rel="nofollow">http://www.oreillynet.com/mac/blog/2002/06/mission_impossible_submitting.html</a></p>
<p><a href="http://blogs.msdn.com/astebner/archive/2005/08/13/451338.aspx" rel="nofollow">http://blogs.msdn.com/astebner/archive/2005/08/13/451338.aspx</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1683287</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1683287</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 20 Mar 2009 11:10:22 GMT</pubDate></item><item><title><![CDATA[Reply to Ambiguous call bei Funktionstemplate Deklaration + Definition on Sat, 21 Mar 2009 17:43:57 GMT]]></title><description><![CDATA[<p>Also Bugs für VS reporten is ganz einfach.<br />
Geh auf</p>
<p><a href="https://connect.microsoft.com/" rel="nofollow">https://connect.microsoft.com/</a></p>
<p>Mach dir nen Account, mach eine &quot;Connection&quot; zu &quot;Visual Studio and .NET Framework&quot;, und reporte den Bug. Wirklich nicht schwer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1683922</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1683922</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 21 Mar 2009 17:43:57 GMT</pubDate></item><item><title><![CDATA[Reply to Ambiguous call bei Funktionstemplate Deklaration + Definition on Sat, 21 Mar 2009 19:59:21 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Also Bugs für VS reporten is ganz einfach.<br />
Geh auf</p>
<p><a href="https://connect.microsoft.com/" rel="nofollow">https://connect.microsoft.com/</a></p>
<p>Mach dir nen Account, mach eine &quot;Connection&quot; zu &quot;Visual Studio and .NET Framework&quot;, und reporte den Bug. Wirklich nicht schwer.</p>
</blockquote>
<p>Abgesehen davon, dass man die Website kennen muss. Auf <a href="http://www.microsoft.com" rel="nofollow">www.microsoft.com</a> habe ich das irgendwie nicht gefunden.<br />
Und was mir gar nicht gefällt ist, dass ich da einen Account machen muss. Wobei anscheinend mein MSN Account bereits ausreicht. Allerdings will Microsoft mehr Informationen, wenn ich da auf weiter drücke, passiert allerdings nichts. Wahrscheinlich wieder mal nur für den IE tauglich. Da habe ich keine Lust...</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1683973</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1683973</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 21 Mar 2009 19:59:21 GMT</pubDate></item></channel></rss>