#include #include #define BAD_DOUBLE(x) x + x constexpr int twice(int value) { return value + value; } int main() { const int expanded = 3 * BAD_DOUBLE(1 + 2); const int called = 3 * twice(1 + 2); int n = 2; const int one_evaluation = twice(++n); assert(expanded == 8); assert(called == 18); assert(n == 3 && one_evaluation == 6); std::cout << expanded << ' ' << called << ' ' << n << '\n'; } #undef BAD_DOUBLE