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); }