Ich habe eine harte Zeit, die Herkunft dieser Kompilierungsfehler zu verstehen.VC++ 2013 Fehler beim Verwenden der Member Initializer-Liste mit Lambda als Mitglied
folgender Code kompiliert ohne Probleme auf gcc-4.9.3 und Klirren-3.8 aber versagt auf VS 2013.
class Sample
{
public:
template<typename T>
explicit Sample(T& in) :
x(in),
lamb([](Sample& ss)
{
std::cout << "This works !!\n" << static_cast<const T&> (ss.get()) << std::endl;
}){}
const int get() const { return x; }
private:
int x;
std::function<void(Sample&)> lamb;
};
int main()
{
int z = 10;
Sample a(z);
return 0;
}
ich mit folgenden Fehlern am Ende:
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C2061: syntax error : identifier 'T'
Die MSDN Erklärung für diese Fehler hat nicht viel geholfen. Was mache ich hier falsch?
[Compiliert] (http://melpon.org/wandbox/permlink/OAkFvu1qV9ESP7Pc) [ohne] (http://melpon.org/wandbox/permlink/LUNHOZZie6GL93E9) [Probleme ] (http://melpon.org/wandbox/permlink/THuTNjFlnhTnokAB), tatsächlich. –
Hoppla ... :) :) Ich habe die Frage mit einem Schnipsel aktualisiert, der sich in der Tat gut auf gcc und clang anpasst. Immer noch Fehler auf VS 2013. – Recker
http://webcompiler.cloudapp.net/ verwendet VS und es zeigt die tatsächliche Fehlermeldung, die es klar macht, dass das Lambda nicht das Vorlagenargument T des Konstruktors verwenden kann (die Zeile mit der statischen Besetzung) As ob es sollte, ich würde mit clang und gcc gehen, aber das ist eine persönliche meinung ohne grund. –