Следующий код компилируется как с gcc 7.2.0, так и с clang 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)
в порядке с неполным типом.