esolução de sobrecarga e matrizes: qual função deve ser chamad

Considere o seguinte 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);
}

Qualf deve ser chamado? Por quê

s últimas versões lançadas de três compiladores discordam da resposta a esta pergunt

(1) é chamado quando o programa é compilado usando g ++ 4.5.2 (2) é chamado quando o programa é compilado usandoVisual C ++ 2010 SP1 (3) é chamado quando o programa é compilado usandoClang 3.0 (tronco 127530)

As regras de resolução de sobrecarga foram alteradas substancialmente em diferentes rascunhos de C ++ 0x? Ou dois desses compiladores estão realmente completamente errados? Qual sobrecarga é a sobrecarga correta a ser selecionada pelo rascunho C ++ 0x mais recente?

questionAnswers(3)

yourAnswerToTheQuestion