
On Thu, 12 Apr 2007 11:46:03 -0500 "Michael Marcin" <mmarcin@method-solutions.com> wrote:
What's the purpose of something like:
template <typename T, std::size_t N> struct tag_of<boost::array<T, N> >;
It forward declares a template. The compiler now knows what to expect.
shouldn't it be something like:
template <typename T, std::size_t N> struct tag_of<boost::array<T, N> > {};
Now you have defined the template. All non specialized stucts tag_of will be defined as an empty class. By simply declaring it, the onus is now on another piece of code to properly define the template. Someone can still provide a "general" definition, but it's very possible that specializations are the true desire. If you want an empty stuct to be the default template, then you can use the above. If, however, you want to force the template definitions then simply provide the forward declaration. With the forward declaration, if a user tries to use the struct in a non-specialized way, a compiler error will result, which is good. You don't want the user to get default "nothing" behavior from a typo. Does that make any sense at all?