私はclass と struct の違いをよく知っていますが、これが明確に定義されているかどうかを正式に言うのに苦労しています:
// 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 バージョンまたはコモーのどれもそれについて警告していないことに驚いています。