Почему унарный оператор & amp; не требуется полный тип?

Следующий код прекрасно компилируется с обоими gcc 7.2.0 а также лязг 6.0.0.

#include <iostream>

struct stru;

void func(stru& s) {
std::cout << &s << std::endl;
}

int main() {

}

Мне интересно, как это нормально. Что, если stru перегружен operator&()? Компилятор не должен быть в состоянии сказать с помощью простого объявления типа struct stru, На мой взгляд, только std::addressof(s) нормально с неполным типом.

12

Решение

Что, если stru перегружен operator&()?

Тогда не определено, будет ли вызвана перегрузка (стандартную цитату см. В комментарии Олива).

Как мог унарный оператор & не требует полного типа?

Вот как стандарт определил язык. Встроенному оператору address-of не нужно знать определение типа, так как это не влияет на то, где можно получить адрес объекта.

Одно соображение, почему это хорошо: совместимость с C.

9

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector