Почему виртуальные функции не могут использовать вывод типа возврата?
n3797 говорит:
§ 7.1.6.4/14:
Функция, объявленная с типом возврата, который использует тип заполнителя, не должна быть виртуальной (10.3).
Поэтому следующая программа некорректна:
struct s
{
virtual auto foo()
{
}
};
Все, что я могу найти для обоснования, это расплывчатыйn3638:
виртуальный
Можно было бы разрешить вычет возвращаемого типа для виртуальных функций, но это усложнило бы как проверку переопределения, так и размещение vtable, поэтому кажется предпочтительным запретить это.
Может ли кто-нибудь дать дополнительное обоснование или привести хороший (кодовый) пример, который согласуется с приведенной выше цитатой?