Продолжение к этому посту. Рассмотрим следующее:
class C;
C foo();
Это пара действительных объявлений. C
не нужно полностью определять, просто объявляя функцию. Но если бы мы добавили следующую функцию:
class C;
C foo();
inline C bar() { return foo(); }
Затем внезапно C
должен быть полностью определенным типом. Но с гарантированным копированием, ни один из его членов не требуется. Там нет копирования или даже перемещения, значение инициализируется в другом месте и уничтожается только в контексте вызывающего (для bar
).
Так почему? Что в стандарте запрещает?