struct A { int x; };
struct B { int y; struct A a; };
B b = { 5, { 1+1 } }; — end example
struct S {
S(int i): I(i) { } // full-expression is initialization of I
int& v() { return I; }
~S() noexcept(false) { }
private:
int I;
};
S s1(1); // full-expression comprises call of S::S(int)
void f() {
S s2 = 2; // full-expression comprises call of S::S(int)
if (S(3).v()) // full-expression includes lvalue-to-rvalue and int to bool conversions,
// performed before temporary is deleted at end of full-expression
{ }
bool b = noexcept(S()); // exception specification of destructor of S considered for noexcept
// full-expression is destruction of s2 at end of block
}
struct B {
B(S = S(0));
};
B b[2] = { B(), B() }; // full-expression is the entire initialization
// including the destruction of temporaries
— end example
void g(int i) {
i = 7, i++, i++; // i becomes 9
i = i++ + 1; // the value of i is incremented
i = i++ + i; // the behavior is undefined
i = i + 1; // the value of i is incremented
} — end example