Я был поражен, узнав, что GCC позволяет функциям возвращать массивы, когда используется возвращаемый тип возврата вместо обычного. Поскольку вы, вероятно, знаете, что массивы не могут быть скопированы, поэтому это довольно ограничено, но позвольте мне показать вам отличный пример.
#include <iostream>
#include <typeinfo>
using namespace std;
auto func() -> int [5]
{
return {4, 56, 78, 4, 0};
}
int main()
{
cout << func()[2] << endl;
cout << typeid(func).name() << endl;
}
Является ли это ошибкой компилятора или какой-то новой функцией?
Интересно, что "typeid" возвращает "FA5_ivE", который разворачивается как "int (()) [5]
", и это означает, что вы считаете, что функция возвращает массив из 5 int.
EDIT: я попытался ограничить возвращаемый массив ссылкой на rvalue, но без каких-либо успехов (использовал большинство возможных форм):
auto &&refArrayTemp{ func() };
Похоже, что эти расширения довольно бесполезны.