Вывод аргумента шаблона класса перед C ++ 17 - PullRequest
0 голосов
/ 18 декабря 2018

Я читал документацию стандартной библиотеки и обнаружил, что есть некоторые функции, такие как make_tuple.Насколько я вижу, эти функции служат только одной цели: создать экземпляр класса с помощью автоматического вывода аргументов шаблона.Поскольку CTAD не был доступен до C ++ 17, пришлось вызывать связанные make-функции.Этот пробел был заполнен только в C ++ 17.Теперь мне интересно, почему он не мог быть реализован ранее "так же, как и вывод аргумента шаблона функции?"Должен быть пример, приводящий к неоднозначности, которую нельзя решить до C ++ 17, я полагаю.Кто-нибудь может это подтвердить?В чем разница между функциями и классами в этом отношении?Спасибо!

1 Ответ

0 голосов
/ 18 декабря 2018

Как уже упоминалось в комментариях, стандартизация функции занимает много времени.
Если вы хотите подробно узнать об этом, вы можете ознакомиться с разделом Стандартизация из https://isocpp.org, особенно "Срок действия предложения ИСО: от" крутой идеи "до" международного стандарта "" .

Бумага, которая в конечном итоге сделала возможным * C 1010 * CTAD в C++ 17 называется Tidbits Template и впервые был опубликован в 2012-09-22.

Он подвергся множеству пересмотров и в статье "Вывод аргументов шаблона для шаблонов классов" , который является шестой редакцией статьи, опубликованной 2016-06-24.

Таким образом, CTAD потребовалось около пяти лет, чтобы перейти от «крутой идеи» к «международному стандарту».

Также, как отмечает @StoryTeller, сама идея существует уже намного дольше и представлена ​​в статье Аргумент вычитания для конструкторов , которая была опубликована в 2007 году.

...