Consider the following header file:
// Foo.h class Foo { public: template void read(T& value); };
I
explicit instantiation has special grammar and special meaning to complier, so cannot be done with meta programming.
your solution cause a instantiation, but not a explicit instantiation.