Смешивание класса и структуры

Мне хорошо известно различие между классом и структурой , однако я изо всех сил пытаюсь авторитетно сказать, правильно ли это определено:

// declare foo (struct)
struct foo;

// define foo (class)
class foo {
};

// instance of foo, claiming to be a struct again! Well defined?
struct foo bar;

// mixing class and struct like this upsets at least one compiler (names are mangled differently)
const foo& test() {
   return bar;
}

int main() {
   test();
   return 0;
}

Если это неопределенное поведение может ли кто-нибудь указать мне на авторитетную (например, главу и стих из ISO) ссылку?

Компилятор, у которого возникли проблемы с этим ( Carbide 2.7 ), относительно старый, и все другие компиляторы, на которых я его пробовал, вполне довольны этим, но очевидно, что это ничего не доказывает.

Моя интуиция подсказывала, что это должно быть неопределенное поведение, но я не могу найти ничего, чтобы подтвердить это, и я удивлен, что ни одна из версий GCC или Comeau не предупреждала об этом.

17
задан Community 23 May 2017 в 10:31
поделиться