pair<Funktionszeiger, char*>
-
Hallo,
warum geht folgendes nicht:
bool b(const vector<int>& v) { return false; } bool c(const vector<int>& v) { return false; } auto B = {pair<decltype(b),char*>(b, "b"), pair<decltype(c),char*>(c, "c")};
-
(Meldung:
Fehler: Feld »std::pair<bool(const std::vector<int>&), char*>::first« deklarierte ungültigerweise einen Funktionstypen| Fehler: keine passende Funktion für Aufruf von »forward(bool (*&)(const std::vector<int>&))«| c:\mingw\bin\..\lib\gcc\mingw32\4.6.1\include\c++\bits\stl_pair.h|137|Anmerkung: Kandidaten sind:| c:\mingw\bin\..\lib\gcc\mingw32\4.6.1\include\c++\bits\move.h|62|Anmerkung: template<class _Tp> _Tp&& std::forward(typename std::remove_reference<_Tp>::type&)| c:\mingw\bin\..\lib\gcc\mingw32\4.6.1\include\c++\bits\move.h|67|Anmerkung: template<class _Tp> _Tp&& std::forward(typename std::remove_reference<_Tp>::type&&)|
-
ok, mit decltype(&b) funzet es
-
Die Fehlermeldung sagt ja, wo das Problem liegt.
bist eine Funktion, also istdecltype(b)ein Funktionstyp. Dass eine implizite Konvertierung zum Funktionszeiger&bexistiert, ist nur ein hässliches Relikt aus C. Ich selbst schreibe den Adressoperator immer hin, und das würde ich dir auch raten.
-
Warum eigentlich kein std::make_pair?
-
XSpille schrieb:
Warum eigentlich kein std::make_pair?
Ist das nicht C++11?
EDIT: okay unten.
-
Nö, gibbet schon Ewigkeiten.