std::function of a function returning an std::function

11/10/2013 18:01 Tasiro#16
Quote:
Originally Posted by MrSm!th View Post
Dass obj.operator func()() nicht implizit funktionieren kann, war mir schon klar, da der () Operator auch sicherlich höhere Priorität hat als Konvertierungen (war zumindest mein Gedanke dabei).
operator() hat keine "Konvertierungs-Priorität". Aber laut [over.match.call] wird bei obj() nach [over.call.object] aufgelöst, und da steht, dass nur Konvertierungsfunktionen in Zeiger bzw. Referenzen auf Funktionen (also z. B. obj.operator void(*)() ()) neben obj.operator()() als brauchbare Funktionen überhaupt in Betracht gezogen werden.

Quote:
Originally Posted by Raz9r View Post
Unter Clang (OS X 10.9, Xcode 5, Apple LLVM 5.0) laufen übrigens alle 4 Fälle, wobei ich mir sicher bin, dass der erste nicht laufen sollte. Es zitiere bitte jemand den Standard und korrigiere mich!
Meinst du die Zuweisungsoperation (test=obj) oder die Initialisierung (func test=obj)?
11/10/2013 20:32 Raz9r#17
Quote:
Originally Posted by Tasiro View Post
Meinst du die Zuweisungsoperation (test=obj) oder die Initialisierung (func test=obj)?
Laufen beide ohne Probleme.
11/10/2013 20:56 Tasiro#18
Quote:
Originally Posted by Raz9r View Post
Laufen beide ohne Probleme.
Also kein Zitat? Dann verweise ich hier für die Zukunft auf [Only registered and activated users can see links. Click Here To Register...], da ist das ausführlich erklärt. Um es kurz zu machen: operator func() konvertiert ein testclass&, und func(testclass&) ist eine Template-Spezialisierung. MSVC ist blind oder will das nicht akzeptieren.
11/11/2013 17:52 MrSm!th#19
Ok, nur falls es jemanden außer mir ebenfalls interessiert:
Mit dem Nov12 CTP sind Variadic Templates auch mit VS 2012 möglich.
11/11/2013 22:28 Tasiro#20
Aber leider darf das nur zu Testzwecken eingesetzt werden, bietet weniger Funktionen und mehr Fehler. Ich würde da eher VS 2013 empfehlen.