I implemented simple code to add all the numbers together, but when inserting one floating number everything gets weird!
How to analyze the behavior of the compiler to deduce the return type?
#include <iostream>
template <typename N>
auto summer(N n)
{
return n;
}
template <typename N, typename... Args>
auto summer(N n, Args... args)
{
return n + summer(args...);
}
int main()
{
printf("add: %d \n", summer(4, 34.1, 13, 14, 15, 22)); // Print 22 ?!??!? return last number.
printf("add: %d \n", summer(4, 34.1, 13, 14, 15, 20)); // Print 20 ?!!?!? return last number.
printf("add: %f \n", summer(4, 34.1, 13, 14, 15, 20)); // It's true 100.1000 ?
}
Problem is that return type of
summer()is double, but you are printing it with%d. Result is similar to when you run a code like this:This is UB (Undefined Behavior). Quote from cpp ref: