
"David B. Held" <dheld@codelogicconsulting.com> wrote in message news:cckeh3$fd0$1@sea.gmane.org...
Jonathan Turkanis wrote:
[...] Could you pull the definition of nested outside of sp
template<typename P1, typename P2, typename T> struct sp_nested { };
then use a metafunction within sp:
template<typename P1, typename P2> struct sp { template<typename T> struct nested { typedef sp_nested<P1, P2, T> type; }; }; [...]
For syntax reasons, this is an undesirable solution.
I 'm not sure I see the syntax problem; if you mean that it's more cumbersome to use a metafunction, I agree.
Although, you could get pretty close by modifying it a little:
template<typename P1, typename P2> struct sp { template<typename T> struct nested : sp_nested<P1, P2, T> { }; };
Then specializing less< ... > for sp_nested wouldn't affect the implementation of less<nested>. <snip>
The problem is that sp_nested<> would be an implementation detail that I would not want to expose to the user. So I would not want the user to have to mention it in order to instantiate less<>.
I don't see the distinction between template <class P1, class P2, typename T> struct less<sp<P1, P2>::nested<T> > : binary_function<...> { bool operator()(...); }; and template <class P1, class P2, typename T> struct less<sp_nested<P1, P2, T> > : binary_function<...> { bool operator()(...); }; with respect to exposing implementation details. Jonathan