cpp-ru/ideas

auto[]

Opened this issue · 1 comments

auto с нами в языке давно и с C++11 оно глубоко укоренилось в языке: дать пользователю возможность вывести тип для своей переменной — так, как это происходит в шаблонах, оказалось хорошей идеей.

Однако по непонятным причинам auto до сих пор остается искусственно ограничен в одном моменте: выводе типов массивов.

Хотя, казалось бы, мы ведь можем выводить тип std::intiializer_list:

#include <initializer_list>

int main() {
   auto x = { 1, 2, 3, 4, 5 };
}

Тип std::array у нас тоже отлично выводится:

#include <array>

int main() {
   std::array x = { 1, 2, 3, 4, 5 };
}

Кроме того, начиная с C++20 мы можем написать так, у нас прекрасно все выведется:

void f(auto(x)[]) { }
int main() {
   int x[] {1, 2, 3, 4, 5 };
   f(x);
}

Чем же обычный массив их хуже? По непонятным причинам мы до сих пор не можем написать

int main() {
   auto x[] { 1, 2, 3, 4, 5 }; // Compilation Error
}

Кажется, будто время наконец это исправить. Ибо это звучит как искуственное ограничение.

Ожидаемое поведение

#include <initializer_list>

int main() {
   auto x0[] = {1, 2, 3, 4, 5}; // x: int[5]
   auto x1[5] = {1, 2, 3, 4, 5}; // x: int[5]
   auto x3[] = {1, 2, 3, 4, 5.0}; // CE
   auto x4 = {1, 2, 3, 4, 5}; // x: std::initializer_list<int>
   auto x5 { 1, 2, 3, 4, 5 }; // CE (same as now)
}