Quote:Simple, clean, unambiguous.
Correction: overcomplicated, clean, and potentially ambiguous.
1. Overcomplicated. In C++ you use 0. If you feel an irrational need to use the word NULL instead of the numeric constant zero, you just # define NULL 0 or include one of the standard headers that is supposed to do that for you. Defining a template class to emulate the numeric constant zero is ridiculous.
2. Clean. For what its worth, you did a good job formatting it, so I'll give it a 8.5. Technically, you should have used T for TYPE since it's shorter and just as obvious since it is well known.
3. Potentially ambiguous. You unnecessarily introduced several additional names into whatever namespace you would define this class and its instance, and when other people attempt to define their own versions of "null", you have created the potential for naming conflicts. No one will get such conflicts using 0 or the standard NULL macro.
However, it is interesting since I never would have thought of it and nostalgic since it brings to mind an old topic.