cpp-ru / ideas

Идеи по улучшению языка C++ для обсуждения
https://cpp-ru.github.io/proposals
Creative Commons Zero v1.0 Universal
89 stars 0 forks source link

Дедукция вывода типа для auto #39

Open Neargye opened 3 years ago

Neargye commented 3 years ago

Перенос предложения: голоса +0, -7 Автор идеи: Максим Некипелов

В языке не помешал бы инструмент, который позволял добавить дедукцию для вывода типа в auto. Предлагаю добавить ключевое слово auto_deduction, которое и будет этим заниматься.

Как это работает сейчас:

template<class T>
struct Property
{
    operator T() const { return { }; }
};

int main()
{
    auto value = Property<int>{ }; // auto будет иметь тип Property<int>
}

Как предлагаю сделать:

template<class T>
struct Property
{
    operator T() const { { }; }
};

template<class T>
auto_deduction Property<T> = T;

int main()
{
    auto value = Property<int>{ }; // будет иметь тип int
}

Также для этого дела не помешала перегрузка:

template<class T>
struct Property
{
    operator T() const { { }; }
};

template<class T>
auto_deduction Property<T> = T;

auto_deduction Property<float> = double;

int main()
{
    auto value = Property<float>{ }; // будет иметь тип double
}

Ну и аналогично поддержку концептов из C++ 20.

Neargye commented 3 years ago

Nikola_g 11 декабря 2020, 19:01 Не понятно, что за проблема побудила ввести такой синтаксис?