связывает ссылку lvalue.

отрим следующую программу:

#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);
}

Которыйf&nbsp;должен называться? Почему?

Последние версии трех компиляторов не согласны с ответом на этот вопрос:

(1)&nbsp;вызывается, когда программа компилируется с использованиемg ++ 4.5.2(2)&nbsp;вызывается, когда программа компилируется с использованиемVisual C ++ 2010 SP1(3)&nbsp;вызывается, когда программа компилируется с использованиемClang 3.0 (багажник 127530)

Существенно ли изменились правила разрешения перегрузки в различных черновиках C ++ 0x? Или два этих компилятора на самом деле просто не правы? Какая перегрузка является правильной перегрузкой, которая должна быть выбрана для последней версии C ++ 0x?