Zainspirowany this question, że próbował następujący kod:warunkowego operatora + uskok + const odniesienia
struct A {
virtual void doit() const = 0;
};
struct B : public A {
virtual void doit() const;
};
struct C : public A {
virtual void doit() const;
};
void
foo(bool p)
{
const A &a = (p ? static_cast<const A &>(B()) : static_cast<const A &>(C()));
a.doit();
}
Every compiler I have tried przyjmuje tego kodu z -Wall -Werror
i generuje się zespół, że ma. Ale po uważnym przeczytaniu specyfikacji C++ 03, sekcja 12.2 ("Tymczasowe") i sekcji 5.12 ("Operator warunkowy"), nie jestem pewien, czy to gwarantuje działanie.
Czy jest to prawidłowy kod, czy też wywołuje niezdefiniowane zachowanie? Czy odpowiedź różni się dla C++ 03 i C++ 11?
Cytaty z odpowiednich specyfikacji byłyby mile widziane.
http://stackoverflow.com/questions/14405837/lifetime-extension-and-the-conditional-operator –
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects .html # 86 –
Wygląda mi doskonale w porządku ... Jaka jest twoja troska? – ildjarn