Ist Visual Studio beim Drucken der Funktionsadresse fehlerhaft?

Nehmen Sie den folgenden Testfall:

#include <iostream>

void foo()
{}

int main()
{
   std::cout << &foo << std::endl;
}

GCC 4.1.2, GCC 4.8 und GCC 4.9 (C ++ 03 und C ++ 11)Geben Sie die folgende Ausgabe beim bauen und dann kompilieren:

$ g++ main.cpp -o test && ./test
main.cpp: In function 'int main()':
main.cpp:8:23: warning: the address of 'void foo()' will always evaluate as 'true' [-Waddress]
   std::cout << &foo << std::endl;
                 ^
1

Dies liegt vermutlich daran, dass die einzige brauchbare Stream-Einfügung für den Funktionszeiger die Konvertierung inbool (und eine Besetzung zuvoid* wäre erforderlich, um tatsächlich eine Adresse in den Stream zu bekommen).

Microsoft Visual Studio 2012 und 2013 geben jedoch stattdessen eine Zeigeradresse aus.

Welcher Toolchainsatz ist konform? Und ist die Nichteinhaltung irgendwo dokumentiert?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage