BOOST_TRIBOOL_THIRD_STATE(Name)
namespace boost {
  namespace logic {
    class tribool;
    BOOST_CONSTEXPR bool indeterminate(tribool, unspecified = unspecified);
    BOOST_CONSTEXPR tribool operator!(tribool);
    BOOST_CONSTEXPR tribool operator&&(tribool, tribool);
    BOOST_CONSTEXPR tribool operator&&(tribool, bool);
    BOOST_CONSTEXPR tribool operator&&(bool, tribool);
    BOOST_CONSTEXPR tribool operator&&(indeterminate_keyword_t, tribool);
    BOOST_CONSTEXPR tribool operator&&(tribool, indeterminate_keyword_t);
    BOOST_CONSTEXPR tribool operator||(tribool, tribool);
    BOOST_CONSTEXPR tribool operator||(tribool, bool);
    BOOST_CONSTEXPR tribool operator||(bool, tribool);
    BOOST_CONSTEXPR tribool operator||(indeterminate_keyword_t, tribool);
    BOOST_CONSTEXPR tribool operator||(tribool, indeterminate_keyword_t);
    BOOST_CONSTEXPR tribool operator==(tribool, tribool);
    BOOST_CONSTEXPR tribool operator==(tribool, bool);
    BOOST_CONSTEXPR tribool operator==(bool, tribool);
    BOOST_CONSTEXPR tribool operator==(indeterminate_keyword_t, tribool);
    BOOST_CONSTEXPR tribool operator==(tribool, indeterminate_keyword_t);
    BOOST_CONSTEXPR tribool operator!=(tribool, tribool);
    BOOST_CONSTEXPR tribool operator!=(tribool, bool);
    BOOST_CONSTEXPR tribool operator!=(bool, tribool);
    BOOST_CONSTEXPR tribool operator!=(indeterminate_keyword_t, tribool);
    BOOST_CONSTEXPR tribool operator!=(tribool, indeterminate_keyword_t);
  }
}
 
namespace boost {
  namespace logic {
    template<typename CharT> class indeterminate_name;
    template<typename T> 
      std::basic_string< T > get_default_indeterminate_name();
    
    template<> 
      std::basic_string< char > get_default_indeterminate_name<char >();
    
    template<> 
      std::basic_string< wchar_t > get_default_indeterminate_name<wchar_t >();
    template<typename CharT, typename Traits> 
      std::basic_ostream< CharT, Traits > & 
      operator<<(std::basic_ostream< CharT, Traits > &, tribool);
    template<typename CharT, typename Traits> 
      std::basic_ostream< CharT, Traits > & 
      operator<<(std::basic_ostream< CharT, Traits > &, unspecified);
    template<typename CharT, typename Traits> 
      std::basic_istream< CharT, Traits > & 
      operator>>(std::basic_istream< CharT, Traits > &, tribool &);
  }
}