Ich versuche ein Merkmal zu schreiben, um zu erkennen, ob ein beliebiger Typ einen Insertionsoperator dafür definiert hat. Dazu möchte ich std :: is_same <> verwenden, um den Typ des Funktionszeigers mit dem erwarteten Typ zu vergleichen. Ich habe ein Problem mit dem folgenden Code ausgestelltDie Adresse des Operators << schlägt fehl in gcc 4.8
#include <iostream>
class A {};
std::ostream& operator<<(std::ostream& os, const A& a)
{
return os;
}
int main()
{
decltype(static_cast<std::ostream&(*)(ostream&, const A&)>(&operator<<)) foo = nullptr;
std::cout << foo << std::endl;
return 0;
}
in gcc 4.8 mit --std = C++ 11
test2.cpp:12:81: error: expected primary-expression before ')' token
decltype(static_cast<std::ostream&(*)(std::ostream&, const A&)>(&::operator<<)) foo = nullptr;
^
Der Fehler nicht in Klirren erscheint oder neuere Versionen von gcc jedoch für Produktion müssen wir in der Lage sein, in gcc 4.8 zu kompilieren. Gibt es dafür einen Workaround in GCC 4.8?
Gedanke, dass das Problem könnte die gleiche gewesen sein, dies zu umgehen, können Sie einen Alias für die Funktion Zeigertyp deklarieren wie http://stackoverflow.com/q/23061912/560648, aber es ist nicht, also weiß ich nicht, warum ich diesen Kommentar schreibe –
Ich hatte angenommen, das Problem sei mit Operator << eher als der Zeigertyp. –