#include #include size_t inc() { static size_t val = 0; ++val; return val; } size_t bar(size_t num = inc()) { return num; } size_t line(size_t line = __LINE__) { return line; } int main() { int num = bar(); assert(num == 1); num = bar(); assert(num == 2); num = bar(); num = bar(); num = bar(); assert(num == 5); // fails // I believe because __LINE__ is just a macro assert(line() == __LINE__); return 0; }