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