+
+ // Type safe versions of the facet access methods:
+ template<class U>
+ U* facet(FacetLevel<T,U> level)
+ {
+ return static_cast<U*>(facet(level.id()));
+ }
+ template<class U>
+ void set_facet(FacetLevel<T,U> level, U* value, bool use_dtor = true)
+ {
+ set_facet(level.id(), value, use_dtor);
+ }
+
+ // Convnience facet access when the type has a associated LEVEL:
+ template<class U> U* facet() { return facet<U>(U::LEVEL); }
+ template<class U> void set_facet(U* p) { set_facet<U>(U::LEVEL, p); }