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?