Diese Zeigererfassung in Lambda-Wrapper um rekursive Funktion

Ich habe eine KlassenvorlageWrap<T> mit einer rekursiven Mitgliedsfunktiontest(int) dass ich mit einem Lambda zu einem STL-Algorithmus übergeben möchten (std::accumulate im Code unten).

Wenn ich eine Standardaufnahmeliste von verwende=und mache meine rekursive meber FunktionstaticAlles ist in Ordnung und ich erhalte das gewünschte Ergebnis.

Wenn ich es jedoch zu einer nicht statischen Member-Funktion mache, beklagen sich sowohl Visual C ++ als auch gcc 4.7.2 über eine unitialisiertethis-pointer, sofern ich meinen rekursiven Aufruf nicht als qualifizierethis->test().

#include <algorithm>
#include <iostream>
#include <vector>

template<typename T>
struct Wrap 
{
   static int test1(int depth)
   {
      std::vector<int> v = { 0, 1, 2, 3 };
      return depth == 0? 1 : std::accumulate(v.begin(), v.end(), int(0), [=](int sub, int const&) {
         return sub + test1(depth - 1);
      });   
   }

   int test2(int depth)
   {
      std::vector<int> v = { 0, 1, 2, 3 };
      return depth == 0? 1 : std::accumulate(v.begin(), v.end(), int(0), [=](int sub, int const&) {
         return sub + /*this->*/test2(depth - 1);
      });   
   }   
};

int main()
{
   std::cout << Wrap<int>::test1(0) << "\n"; // 1
   std::cout << Wrap<int>::test1(1) << "\n"; // 4
   std::cout << Wrap<int>::test1(2) << "\n"; // 16

   Wrap<int> w;
   std::cout << w.test2(0) << "\n"; // 1
   std::cout << w.test2(1) << "\n"; // 4
   std::cout << w.test2(2) << "\n"; // 16
}

Ausgang einLiveWorkSpace:

source.cpp: In instantiation of 'int Wrap<T>::test2(int) [with T = int]':   
source.cpp:32:26:   required from here 
source.cpp:19:74: error: missing initializer for member 'Wrap<T>::test2(int) [with T = int]::<lambda(int, const int&)>::__this' [-Werror=missing-field-initializers]

Auskommentieren der/*this->/* piece ergibt dasselbe Ergebnis wie für die statische Elementfunktion.

Warum muss ich meinen rekursiven Anruf mit qualifizieren?this->?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage