namespace boost {
  template<typename T, typename Alloc> class circular_buffer;
  template<typename T, typename Alloc> 
    bool operator==(const circular_buffer< T, Alloc > &, 
                    const circular_buffer< T, Alloc > &);
  template<typename T, typename Alloc> 
    bool operator<(const circular_buffer< T, Alloc > &, 
                   const circular_buffer< T, Alloc > &);
  template<typename T, typename Alloc> 
    bool operator!=(const circular_buffer< T, Alloc > &, 
                    const circular_buffer< T, Alloc > &);
  template<typename T, typename Alloc> 
    bool operator>(const circular_buffer< T, Alloc > &, 
                   const circular_buffer< T, Alloc > &);
  template<typename T, typename Alloc> 
    bool operator<=(const circular_buffer< T, Alloc > &, 
                    const circular_buffer< T, Alloc > &);
  template<typename T, typename Alloc> 
    bool operator>=(const circular_buffer< T, Alloc > &, 
                    const circular_buffer< T, Alloc > &);
  template<typename T, typename Alloc> 
    void swap(circular_buffer< T, Alloc > &, circular_buffer< T, Alloc > &);
}
 
namespace boost {
  template<typename T, typename Alloc> class circular_buffer_space_optimized;
  
  template<typename T, typename Alloc> 
    bool operator==(const circular_buffer_space_optimized< T, Alloc > & lhs, 
                    const circular_buffer_space_optimized< T, Alloc > & rhs);
  
  template<typename T, typename Alloc> 
    bool operator<(const circular_buffer_space_optimized< T, Alloc > & lhs, 
                   const circular_buffer_space_optimized< T, Alloc > & rhs);
  
  template<typename T, typename Alloc> 
    bool operator!=(const circular_buffer_space_optimized< T, Alloc > & lhs, 
                    const circular_buffer_space_optimized< T, Alloc > & rhs);
  
  template<typename T, typename Alloc> 
    bool operator>(const circular_buffer_space_optimized< T, Alloc > & lhs, 
                   const circular_buffer_space_optimized< T, Alloc > & rhs);
  
  template<typename T, typename Alloc> 
    bool operator<=(const circular_buffer_space_optimized< T, Alloc > & lhs, 
                    const circular_buffer_space_optimized< T, Alloc > & rhs);
  
  template<typename T, typename Alloc> 
    bool operator>=(const circular_buffer_space_optimized< T, Alloc > & lhs, 
                    const circular_buffer_space_optimized< T, Alloc > & rhs);
  
  template<typename T, typename Alloc> 
    void swap(circular_buffer_space_optimized< T, Alloc > & lhs, 
              circular_buffer_space_optimized< T, Alloc > & rhs);
}