1. You can't solve this with the word extern.
2. You can solve this by putting "class template World<2, 2>;"
3. You should realize how restricting this is to be placed in the implementation itself and not inlined.

Another solution is using in-line files. In-line files contain the definition of templates. The file is then #included at the bottom of the header where the declaration is. The extension can be anything other than the extensions for header/source modules. For example:

You're still required to include everything inside of the "inl" file which increases compile-times, you're required to repeat literally every single template definition a second time, it adds yet another file into the codebase, and reduces code-readability since you must open yet another file to figure out the definition of the template functions.

The first one is simple and flexible. The second one is confusing, inflexible, and really bad practice (in most cases). In your case, you *want* to inline your template because there's generally never going to be a case where you know what template parameters you pass to the template function.