¿Visual Studio presenta errores al imprimir la dirección de la función?

Tome el siguiente caso de prueba:

#include <iostream>

void foo()
{}

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

GCC 4.1.2, GCC 4.8 y GCC 4.9 (C ++ 03 y C ++ 11) todosdar el siguiente resultado al compilar y luego 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

Se supone que esto se debe a que la única inserción de flujo viable para el puntero de función es conversión abool (y un elenco paravoid* sería necesario para obtener realmente una dirección en la secuencia).

Sin embargo, Microsoft Visual Studio 2012 y 2013 muestran una dirección de puntero.

¿Qué conjunto de cadenas de herramientas es conforme? ¿Y se documenta la no conformidad en alguna parte?

Respuestas a la pregunta(2)

Su respuesta a la pregunta