If you declare a template, you must also define it. A definition provides enough information to implement the template. The following example defines the template declared in the previous example.
template <class Number> Number twice( Number original ) { return original + original; } |
Because template definitions often appear in header files, a template definition might be repeated in several compilation units. All definitions, however, must be the same. This restriction is called the One-Definition Rule.
The compiler does not support expressions involving non-type template parameters in the function parameter list, as shown in the following example.
// Expressions with non-type template parameters // in the function parameter list are not supported template<int I> void foo( mytype<2*I> ) { ... } template<int I, int J> void foo( int a[I+J] ) { ... } |