Lambda als Default Parameter für function?
-
Hallo,
Ich teste gerade ein paar C++0x Konzepte die bereits vom MSVC 10 unterstützt werden und versuche gerade folgendes:
bool foo( int arg, std::function<bool (unsigned)> func = [](unsigned n) { return n == 0xDEADBEEF; } ) { return func(arg); } // Compiler Error: 'n' illegal use of local variable as default parameter.Kann sich das jemand erklären?
-
habe zwar keine Ahnung was du da machst aber meine Spekulation wär das du vll hinter unsigned noch einen Typ setzen müsstest bei
unsigned nAnsonsten wüsste ich aber auch nicht was der Fehler heißen könnte.
-
Vermutlich muss es unsigned int heißen. In C++ wird ohne Typ nicht einfach von einem int ausgegangen, denke ich.
-
Nur "unsigned" als Typ ist schon vollkommen OK

-
@FrEEzE2046
Das ist eine Lambdafunktion... google danach.
-
Klar ist das ne Lambda Expression.
Nur wo erklärt das warum es nicht geht?
-
Melds einfach als Compilerbug. Die werden dir die richtige Lösung schon geben

-
hustbaer schrieb:
Klar ist das ne Lambda Expression.
Nur wo erklärt das warum es nicht geht?
Bin ich heute verwirrt... 
-
Also erstmal ist "unsigned" für sich schon okay.
Desweiteren halte ich mich an den aktuellen Entwurf (ISO/IEC JTC1 SC22 WG21 N3092). Demnach ist alles korrekt.Der Lambda Ausdruck ist außerhalb dieser Deklaration ja auch verwendbar! Er mag es nur nicht, wenn ich es als Default-Parameter in einer Funktion setzen möchte.
Ich denke es ist wirklich ein Compiler Bug ...
-
Ich rate mal ins Blaue, aber Default-Parameter müssen ja normalerweise in der Definition und nicht in der Deklaration angegeben werden. Verhält sich mit den Lambdas wahrscheinlich auch so...
-
Source2702 schrieb:
Ich rate mal ins Blaue, aber Default-Parameter müssen ja normalerweise in der Definition und nicht in der Deklaration angegeben werden.
Für Default Parameter bei Methoden genau umgekehrt.
-
Sorry, ich meinte es eigentlich umgekehrt.
In seinem Codeausschnitt wird nämlich bei der Definition der Default-Parameter angegeben.
-
Source2702 schrieb:
Sorry, ich meinte es eigentlich umgekehrt.
In seinem Codeausschnitt wird nämlich bei der Definition der Default-Parameter angegeben.Wenn's keine Deklaration vor der Definition gibt ist das schon OK.