Resolución de sobrecarga y matrices: ¿qué función debería llamarse?

Considere el siguiente programa:

#include <cstddef>
#include <cstdio>

void f(char const*&&)      { std::puts("char const*&&");      } // (1)
void f(char const* const&) { std::puts("char const* const&"); } // (2)

template <std::size_t N>
void f(char const (&)[N])  { std::puts("char const(&)[N]");   } // (3)

int main()
{
    const char data[] = "a";
    f(data);
}

Cualf debe ser llamado? ¿Por qué

Las últimas versiones lanzadas de tres compiladores no están de acuerdo con la respuesta a esta pregunta:

(1) se llama cuando el programa se compila usando g ++ 4.5.2 (2) se llama cuando el programa se compila usandoVisual C ++ 2010 SP1 (3) se llama cuando el programa se compila usandoClang 3.0 (troncal 127530)

¿Han cambiado sustancialmente las reglas de resolución de sobrecarga en diferentes borradores de C ++ 0x? ¿O dos de estos compiladores están realmente completamente equivocados? ¿Qué sobrecarga es la sobrecarga correcta que se seleccionará según el último borrador de C ++ 0x?

Respuestas a la pregunta(3)

Su respuesta a la pregunta