"Philippe A. Bouchard" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED]
[...] > int main() > { > optional<B> b; > optional<C> c; > > foo(b); > //foo(c); > } BTW implicit cast to reference types are not implicit under GCC, they have to be called explicitly. Template casts do not seem to be defined in the standard...: template <typename T> struct optional { template <typename U> operator optional<U> const & () const { return * reinterpret_cast<optional<U> const *>(static_cast<U const *>(reinterpret_cast<T const *>(storage_))); } ... }; inline void foo(optional<A> const &) { } int main() { optional<B> b; //foo(b); foo(b.template operator optional<A> const & <A> ()); } Also, the advantage of casts to reference types is that they do not create any temporary objects implicitly. I do not see in what it can be dangerous. What do you think? Philippe A. Bouchard _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost