#include <iostream>
using namespace std;
int x = 42 ;
int g( int arg) {
cout << "g was called with argument " << arg << endl;
return arg;
}
void f( int arg = g( x) ) {
cout << "f was called with argument " << arg << endl;
}
int main( ) {
f( ) ; // g is called the first time
f( ) ; // g is called again
f( 23 ) ; // g isn't called because an argument was provided
x = 13 ;
f( ) ; // g is called again, taking the changed value of x into account
{
int x = 7 ;
f( ) ; // g is called again, the local x is ignored because it wasn't in
// scope when f was defined
}
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IHggPSA0MjsKCmludCBnKGludCBhcmcpIHsKCWNvdXQgPDwgImcgd2FzIGNhbGxlZCB3aXRoIGFyZ3VtZW50ICIgPDwgYXJnIDw8IGVuZGw7CglyZXR1cm4gYXJnOwp9Cgp2b2lkIGYoaW50IGFyZyA9IGcoeCkpIHsKCWNvdXQgPDwgImYgd2FzIGNhbGxlZCB3aXRoIGFyZ3VtZW50ICIgPDwgYXJnIDw8IGVuZGw7Cn0KCmludCBtYWluKCkgewoJZigpOyAvLyBnIGlzIGNhbGxlZCB0aGUgZmlyc3QgdGltZQoJZigpOyAvLyBnIGlzIGNhbGxlZCBhZ2FpbgoJZigyMyk7IC8vIGcgaXNuJ3QgY2FsbGVkIGJlY2F1c2UgYW4gYXJndW1lbnQgd2FzIHByb3ZpZGVkCgl4ID0gMTM7CglmKCk7IC8vIGcgaXMgY2FsbGVkIGFnYWluLCB0YWtpbmcgdGhlIGNoYW5nZWQgdmFsdWUgb2YgeCBpbnRvIGFjY291bnQKCXsKCQlpbnQgeCA9IDc7CgkJZigpOyAvLyBnIGlzIGNhbGxlZCBhZ2FpbiwgdGhlIGxvY2FsIHggaXMgaWdub3JlZCBiZWNhdXNlIGl0IHdhc24ndCBpbgoJCSAgICAgLy8gc2NvcGUgd2hlbiBmIHdhcyBkZWZpbmVkCgl9CglyZXR1cm4gMDsKfQ==