<?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[vector move Problem MSVC2013]]></title><description><![CDATA[<p>Hi,</p>
<p>ich versuche gerade mein altes Projekt auf MSVC2013 zu portieren. Leider kompiliert er Folgendes nicht mehr:</p>
<pre><code class="language-cpp">struct type {};

	typedef std::vector&lt;type&gt; vType;

	class cl
	{
	private:
		vType a;

	public:
		void setInfo(vType b)
		{
			this-&gt;a = std::move(b);
		}
	};
</code></pre>
<p>Ohne Move kein Problem, doch mit: Eine Kette von &quot;siehe&quot;-Hinweisen und letztendlich sagt er:</p>
<blockquote>
<p>1&gt;c:\program files (x86)\microsoft visual studio 12.0\vc\include\xutility(750): error C2677: Binärer Operator '+=': Es konnte kein globaler Operator gefunden werden, der den Typ 'std::_Vector_iterator&lt;std::_Vector_val&lt;std::_Simple_types<a href="Range::type" rel="nofollow">Range::type</a>&gt;&gt;' akzeptiert (oder keine geeignete Konvertierung möglich)<br />
1&gt; c:\program files (x86)\microsoft visual studio 12.0\vc\include\xutility(758): Siehe Verweis auf die Instanziierung der gerade kompilierten Funktions-template &quot;void std::_Distance2&lt;_InIt,__w64 int&gt;(_RanIt,_RanIt,_Diff &amp;,std::random_access_iterator_tag)&quot;.</p>
</blockquote>
<p>hier:</p>
<pre><code class="language-cpp">template&lt;class _RanIt,
	class _Diff&gt; inline
		void _Distance2(_RanIt _First, _RanIt _Last, _Diff&amp; _Off,
			random_access_iterator_tag)
	{	// add to _Off distance between random-access iterators
 #if _ITERATOR_DEBUG_LEVEL == 2
	if (_First != _Last)
		{	// check for null pointers
		_DEBUG_POINTER(_First);
		_DEBUG_POINTER(_Last);
		}
 #endif /* _ITERATOR_DEBUG_LEVEL == 2 */

	_Off += _Last - _First; // &lt;----------------
	}
</code></pre>
<p>Ich kann damit nichts anfangen und dachte mir, vll erstellt er für type nicht automatisch move-ctor/move-assignment-op. Jedoch ändert die Änderung zu:</p>
<pre><code class="language-cpp">struct type
	{
		type(type&amp;&amp;) {}
		type&amp; operator=(type&amp;&amp;) {}
	};
</code></pre>
<p>nichts.</p>
<p>Mein Projekt lief in MSVC2010. Ist MSVC2013 jetzt standardkonformer und mein Code nicht?</p>
<p>Freue mich über alle Antworten, vielen Dank und beste Grüße!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/325536/vector-move-problem-msvc2013</link><generator>RSS for Node</generator><lastBuildDate>Sun, 12 Jul 2026 14:25:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/325536.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 07 May 2014 05:57:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to vector move Problem MSVC2013 on Wed, 07 May 2014 05:57:56 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich versuche gerade mein altes Projekt auf MSVC2013 zu portieren. Leider kompiliert er Folgendes nicht mehr:</p>
<pre><code class="language-cpp">struct type {};

	typedef std::vector&lt;type&gt; vType;

	class cl
	{
	private:
		vType a;

	public:
		void setInfo(vType b)
		{
			this-&gt;a = std::move(b);
		}
	};
</code></pre>
<p>Ohne Move kein Problem, doch mit: Eine Kette von &quot;siehe&quot;-Hinweisen und letztendlich sagt er:</p>
<blockquote>
<p>1&gt;c:\program files (x86)\microsoft visual studio 12.0\vc\include\xutility(750): error C2677: Binärer Operator '+=': Es konnte kein globaler Operator gefunden werden, der den Typ 'std::_Vector_iterator&lt;std::_Vector_val&lt;std::_Simple_types<a href="Range::type" rel="nofollow">Range::type</a>&gt;&gt;' akzeptiert (oder keine geeignete Konvertierung möglich)<br />
1&gt; c:\program files (x86)\microsoft visual studio 12.0\vc\include\xutility(758): Siehe Verweis auf die Instanziierung der gerade kompilierten Funktions-template &quot;void std::_Distance2&lt;_InIt,__w64 int&gt;(_RanIt,_RanIt,_Diff &amp;,std::random_access_iterator_tag)&quot;.</p>
</blockquote>
<p>hier:</p>
<pre><code class="language-cpp">template&lt;class _RanIt,
	class _Diff&gt; inline
		void _Distance2(_RanIt _First, _RanIt _Last, _Diff&amp; _Off,
			random_access_iterator_tag)
	{	// add to _Off distance between random-access iterators
 #if _ITERATOR_DEBUG_LEVEL == 2
	if (_First != _Last)
		{	// check for null pointers
		_DEBUG_POINTER(_First);
		_DEBUG_POINTER(_Last);
		}
 #endif /* _ITERATOR_DEBUG_LEVEL == 2 */

	_Off += _Last - _First; // &lt;----------------
	}
</code></pre>
<p>Ich kann damit nichts anfangen und dachte mir, vll erstellt er für type nicht automatisch move-ctor/move-assignment-op. Jedoch ändert die Änderung zu:</p>
<pre><code class="language-cpp">struct type
	{
		type(type&amp;&amp;) {}
		type&amp; operator=(type&amp;&amp;) {}
	};
</code></pre>
<p>nichts.</p>
<p>Mein Projekt lief in MSVC2010. Ist MSVC2013 jetzt standardkonformer und mein Code nicht?</p>
<p>Freue mich über alle Antworten, vielen Dank und beste Grüße!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2397794</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2397794</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Wed, 07 May 2014 05:57:56 GMT</pubDate></item><item><title><![CDATA[Reply to vector move Problem MSVC2013 on Wed, 07 May 2014 07:21:20 GMT]]></title><description><![CDATA[<p>Also</p>
<pre><code>#include &lt;vector&gt;

struct type {};

typedef std::vector&lt;type&gt; vType;

class cl
{
private:
	vType a;

public:
	void setInfo(vType b)
	{
		this-&gt;a = std::move(b);
	}
};

int main()
{
	cl c;
	vType v;
	c.setInfo(v);
}
</code></pre>
<p>Kompiliert bei mir ganz normal, wo bekommst du da denn genau einen Fehler?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2397805</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2397805</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Wed, 07 May 2014 07:21:20 GMT</pubDate></item></channel></rss>