
Hi guys, I don't know how and how much boost:optional<> overlaps with this (last time I checked it was different, but I know there's a proposal in which the template has been changed), anyway: is there interest for a Barton-Nackman's fallible<T> template? Basically the idea is (warning: not compiled): #include <assert.h> template<typename T> class fallible { public : fallible(); explicit fallible(const T & value); bool is_valid() const; const T& value() const; operator T() const; const T& else_default_to(const T& default_value) const; void invalidate(); void validate(const T& value); // alternative to operator= private : T m_value; bool m_valid; }; template<typename T> fallible<T>::fallible() : m_valid(false) { } template<typename T> fallible<T>::fallible( const T& v ) : m_value(v), m_valid(true) { } template<typename T> bool fallible<T>::is_valid() const { return m_valid; } template<typename T> const T& fallible<T>::value() const { assert(m_valid); // <--- return m_value; } template<typename T> fallible<T>::operator T() const { return value(); } template<typename T> const T& fallible<T>::else_default_to(const T& default_value) const { return is_valid() ? static_cast<const T&>(value()) : static_cast<const T&>(default_value); } template<typename T> void fallible<T>::invalidate() { m_valid = false; } template <typename T> void fallible<T>::validate(const T& value) { m_value = value; m_valid = true; } -- [ Gennaro Prota, C++ developer for hire ] [ resume: available on request ]