В C/C++ вообще нет массивов как типа данных... Он всегда
редуцируется до указателя на первый элемент. Массив, в частности,
нельзя передать в качестве аргумента функции, нельзя вернуть из
функции. В C++ от безысходности придумали std::array, но правда это что-то типа структуры нужного размера -- вот его можно и вернуть из функции и передать по значению (с копированием). Но опять же там костыли, как и с std::initializer_list (просто попробуйте реализовать свой std::my_array или std::my_initializer_list путём копирования кода из библиотечных хедеров -- и обнаружите, что работать перестало, т.к. в компиляторе есть костыли и подпорки: когда он видит имя типа "std::array" или "std::initializer_list" то делается некоторая магия, а иначе нет...)