Я читал вопрос Литба о SFINAE здесь , и мне было интересно, что именно его код декларирует. Более простой (без шаблонов) пример приведен ниже:
int (&a())[2];
Что именно это декларирует? Какова роль &? Чтобы добавить к моей путанице, если я вместо этого заявляю следующее
int b()[2];
Я получаю сообщение об ошибке при объявлении функции, возвращающей массив, в то время как в первой строке такой ошибки нет (поэтому можно подумать, что первое объявление не функция). Однако, если я попытаюсь присвоить
a = a;
Я получаю сообщение об ошибке, в котором говорится, что я пытаюсь назначить функцию a ... теперь она является функцией. Что именно это за вещь?