ptrdiff_t mit size_t vergleichen



  • ich hab folgendes Problemchen: ich verwende einen Ausdruck vom Typ size_t und vergleiche ihn mit einem Ausdruck vom Typ ptrdiff_t, wonach der Compiler mir eine Warnung entgegenschleudert von wegen comparison between signed and unsigned integer expressions . Wie krieg ich das weg? Der fragliche Code lautet:

    class X {
    public:
      std::size_t Size();
      void f();
    private:
      struct Impl;
      auto_ptr<Impl> pimpl;
    };
    
    struct X::Impl {
      std::deque<TH1*> histos
    };
    
    void X::f() {
      if (std::count(pimpl->histos.begin(), pimpl->histos.end(), static_cast<TH1*>(0)) >= Size()) /*...*/
    }
    

    Stellt sich die Frage, warum std::count ueberhaupt eine signed integer expression zurueckgibt...



  • Naja notfalls einfach nach unsigned casten ...
    es wird ein

    template <class InputIterator, class T>
    typename iterator_traits<InputIterator>::difference_type count ( ForwardIterator first, ForwardIterator last, const T& value );
    

    =>

    std::iterator_traits<InputIterator>::difference_type
    

    von std::count zurück gegeben, der Typ ist demnach Teil der struct std::iterator_traits und dann kommt es darauf an => http://www.sgi.com/tech/stl/iterator_traits.html


Anmelden zum Antworten