That statement isn't true: in C++ you always have functions, some could have no return type ( void ), some could have arguments by pointer or reference (and modify the values of arguments) and some could have both
That phrase quoted by the original poster is in a JAVA faq section not C++.
can any JAVA programmers here confirm the validity of that particular statement then or as is mst likely the case - the faq is talking crap?
The distinction in Function/Subroutine comes from Fortran II (maybe others) circa 1960. In Fortran you had to specify that a return value was required by declaring the subprogram to be a FUNCTION. SUBROUTINES could not return a value via the return statement. Both could alter arguments.
C (circa 1970) removed the distinction. All subprograms were functions and by default, return an 'int', This later was altered with the inclusion of 'void' and made subprograms smell and feel that Fortran SUBROUTINES. C++ adopted the convention.
In Ada there is a clear distinction betwen FUNCTIONS and SUBROUTINES. In FUNCTIONS you can not alter arguments (although you can if you use wrappers). In SUBROUTINES you can modify arguments but you can not return values.
Other languages do other things. For C/C++ any FUNCTION can be made a SUBROUTINE by declaring the return value to be 'void'.