|
Boost : |
From: Paul Mensonides (pmenso57_at_[hidden])
Date: 2002-04-23 16:13:21
> > This is a much simpler idiom than what I saw on clcm. That's great,
> > because it can have tons of cool applications.
> >
> > Who invented it?
Be careful though Andrei. Some implementations don't like it if there is a
nested template named the same as what you are looking for. I had to really
jump through some huge hoops to get this to work either way on Comeau C++ -- I
don't know about anything else.
For instance, given the implementation before, Comeau C++ will currently give a
compile time error for the following:
struct Y {
template<class> class nested { }; // i.e. nested is a template, not a type
};
Comeau C++ also has a problem with the reverse scenario to detect if a
*template* exists:
template<class T> class has_unary_template_nested {
private:
template<class U> static small_t check(
typename U::template nested<null_t>* );
template<class U> static large_t check(...);
public:
enum { value = sizeof(check<T>(0)) == sizeof(small_t) };
};
This also works fine until you pass a type like the following to it:
struct Y {
struct nested { };
};
I guess you can't have everything--yet. :)
Paul Mensonides
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk