When you put the declarations and definitions for a template within the file that uses the template, the organization is definitions-included. For example:
main.cc | template <class Number> Number twice( Number original ); template <class Number> Number twice( Number original ) { return original + original; } int main( ) { return twice<int>( -3 ); } |
When a file using a template includes a file that contains both the template's declaration and the template's definition, the file that uses the template also has the definitions-included organization. For example:
twice.h | #ifndef TWICE_H #define TWICE_H template <class Number> Number twice( Number original ); template <class Number> Number twice( Number original ) { return original + original; } #endif |
main.cc | #include "twice.h" int main( ) { return twice( -3 ); } |
It is very important to make your template headers idempotent. (See "Idempotent Header Files" on page 9.)