Fix it for standards-complient compilers (GCC/Clang).

Unfortunately, this means that all formatters must be declared in the
same place now, as they must be declared BEFORE the template which uses
them is declared (not just before it was instantiated, which MSVC allows).