text: //  (C) Copyright 2008-10 Anthony Williams
  //  (C) Copyright 2011-2012 Vicente J. Botet Escriba
  //
  //  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_THREAD_FUTURE_ERROR_CODE_HPP
  #define BOOST_THREAD_FUTURE_ERROR_CODE_HPP
  
  #include <boost/thread/detail/config.hpp>
  #include <boost/detail/scoped_enum_emulation.hpp>
  #include <boost/system/error_code.hpp>
  #include <boost/type_traits/integral_constant.hpp>
  
  namespace boost
  {
  
    //enum class future_errc
    BOOST_SCOPED_ENUM_DECLARE_BEGIN(future_errc)
    {
        broken_promise = 1,
        future_already_retrieved,
        promise_already_satisfied,
        no_state
    }
    BOOST_SCOPED_ENUM_DECLARE_END(future_errc)
  
    namespace system
    {
      template <>
      struct BOOST_SYMBOL_VISIBLE is_error_code_enum<future_errc> : public true_type {};
  
      #ifdef BOOST_NO_CXX11_SCOPED_ENUMS
      template <>
      struct BOOST_SYMBOL_VISIBLE is_error_code_enum<future_errc::enum_type> : public true_type { };
      #endif
    } // system
  
    BOOST_THREAD_DECL
    const system::error_category& future_category() BOOST_NOEXCEPT;
  
    namespace system
    {
      inline
      error_code
      make_error_code(future_errc e) BOOST_NOEXCEPT
      {
          return error_code(underlying_cast<int>(e), boost::future_category());
      }
  
      inline
      error_condition
      make_error_condition(future_errc e) BOOST_NOEXCEPT
      {
          return error_condition(underlying_cast<int>(e), future_category());
      }
    } // system
  } // boost
  
  #endif // header
  