//----------------------------------------------------------------------------- // boost variant/detail/backup_holder.hpp header file // See http://www.boost.org for updates, documentation, and revision history. //----------------------------------------------------------------------------- // // Copyright (c) 2003 // Eric Friedman // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_VARIANT_DETAIL_BACKUP_HOLDER_HPP #define BOOST_VARIANT_DETAIL_BACKUP_HOLDER_HPP #include "boost/assert.hpp" namespace boost { namespace detail { namespace variant { template class backup_holder { private: // representation T* backup_; public: // structors ~backup_holder() { delete backup_; } explicit backup_holder(T* backup) : backup_(backup) { } backup_holder(const backup_holder&); public: // modifiers backup_holder& operator=(const backup_holder& rhs) { *backup_ = rhs.get(); return *this; } backup_holder& operator=(const T& rhs) { *backup_ = rhs; return *this; } void swap(backup_holder& rhs) { T* tmp = rhs.backup_; rhs.backup_ = this->backup_; this->backup_ = tmp; } public: // queries T& get() { return *backup_; } const T& get() const { return *backup_; } }; template backup_holder::backup_holder(const backup_holder&) : backup_(0) { // not intended for copy, but do not want to prohibit syntactically BOOST_ASSERT(false); } template void swap(backup_holder& lhs, backup_holder& rhs) { lhs.swap(rhs); } }} // namespace detail::variant } // namespace boost #endif // BOOST_VARIANT_DETAIL_BACKUP_HOLDER_HPP