yet another
#include <cstdio> struct I { virtual I *f() = 0; }; struct A : virtual I { virtual I *f() { puts("A"); return this; } }; struct B : virtual I { virtual I *f() { puts("B"); return this; } B(I *x) { x->f(); } }; struct C : A, B { virtual I *f() { puts("C"); return this; } C() : A(), B(((A *)this)->f()) { ((A *)this)->f(); } }; int main() { C c; }
何が出るかな、何が(ry
運が悪ければ悪魔が出る。良ければ天使かもしれない。どちらでもなければ、たぶん出力は B, C で終わる。たとえば:*1
$ g++ test.cpp && ./a.out A B C