O Visual Studio está com erros na impressão do endereço da função?

Faça o seguinte caso de teste:

#include <iostream>

void foo()
{}

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

GCC 4.1.2, GCC 4.8 e GCC 4.9 (C ++ 03 e C ++ 11) todosdê a seguinte saída ao construir e depois compilar:

$ 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

Isso ocorre porque a única inserção viável de fluxo para o ponteiro de função é a conversão embool (e um elenco paravoid* seria necessário para realmente obter um endereço no fluxo).

No entanto, o Microsoft Visual Studio 2012 e 2013 produzem um endereço de ponteiro.

Qual conjunto de cadeias de ferramentas é compatível? E a não conformidade está documentada em algum lugar?

questionAnswers(2)

yourAnswerToTheQuestion