Я знаю, что функция не может вернуть массив, но это объявление функции
auto fun(/*...*/) -> int [2]
может пройти компиляцию. Зачем!?
Действительно, функция не может возвращать простой массив по значению.
Объявление с таким возвращаемым типом является некорректным, и если компилятор принимает его без предупреждения, то компилятор не полностью соответствует стандарту. Возможно, это ошибка — или расширение языка.
Похоже, что эта ошибка воспроизводима в g ++ — 6.1. Если вы попытаетесь определить функцию, которая возвращает массив, вы увидите это смешное сообщение об ошибке:
error: cannot convert 'int [2]' to 'int [2]' in return
Других решений пока нет …