The problem that I think Joel and K-ballo are raising is one that I've never considered before. When writing a program (a non-crazy metaprogram), it is considered bad practice to pass around a series of integer values instead of an enumerated type because contextual information is lost. Most programmers are initially able to grasp what the numbers represent. But if integers were used in entirely different contexts, a programmer has to first determine the context for the particular integer, and then determine the meaning in that context.

Everyone involved is likely able to read and understand this now, but what if spirit used ```int_<N>``` to represent other things as well? Anyone maintaining spirit would have to understand what ```int_<N>``` meant in that particular context, which can get really damn difficult to debug/understand with code that gets executed at compile and then runtime.

Its likely with custom tags and mpl or_ statements the same behavior can be achieved. The advantage is that a future maintainer is easily able to know the context simply by reading the custom tag name.