A function that has a return type of void must have some effect such as input, output, or modification of the arguments.
A function that has a non void return type should typically not have side effects. It is like an operator that produces some new result but doesn't change its operands.