Имеется следующий код:
void f(char(&)[8]);
void f(char*);
int main()
{
char b[8];
f(b);
}
Visual ругается на него (аналогично ведет себя и g++):
test.cpp(6) : error C2668: 'f' : ambiguous call to overloaded function
test.cpp(2): could be 'void f(char *)'
test.cpp(1): or 'void f(char (&)[8])'
while trying to match the argument list '(char [8])'
Кто-нибудь может объяснить почему? Ведь первый вариант функции
f не требует никакой конверсии аргументов, а второй вариант требует преобразования
array-to-pointer (4.2 из стандарта).