Though the declaration may seem rather involved, the actual application of this function is quite simple:

C++

1

print_as_csv(std::cout,';',2.0,42,"hello");

The compiler knows how to create an instance of
print_as_csv by a mechanism called template argument deduction. It works only for functions, because the compiler needs arguments to deduce the types from. There are, however, template functions for which not all template arguments can be deduced by the compiler.

Loops are among the basic constructs you find in nearly all programming languages. Of the available variations,
for loops are the most common ones. The word
for is so small that it is not affected by the tax on long keywords and variable names that programming languages seem to be subject of. Thus, you will find
for as a keyword in most of them.

C++11 supports a multitude of styles to write
for loops. Let us have a look at some of these possibilities for a simple example.

Templates are a mixed blessing for C++ developers. On the one hand, templates avoid code duplication as most impressively demonstrated by the standard template library. The template mechanism, in contrast to preprocessor macros, is aware of the C++ language and part of it. Compilers can produce helpful error messages – and some compilers even do so.

Some compilers, however, fail in providing clear template compilation error messages. If you make a mistake, you are greeted by a bucket load of irritating notes on what went wrong in detail. Since it is down to you to identify the relevant chunks, this is often referred to as template barf.