warning: no return statement in function returning non-void [-Wreturn-type]



  • Hallöle,

    Tjoah, der Titel sagt ja eigentlich schon alles. Es geht um folgende Zeile:

    pool_.create_thread([&] { service_.run(); });
    

    Wie krieg ich GCC dazu, Ruhe zu geben, ohne explizit () -> void hinzuschreiben? Das kann doch nur ein Bug sein. 🤡

    Grüße,
    Der Kellerautomat



  • - Mein Fail -



  • Sorry, aber deine Antwort hat mit meiner Frage nichts zu tun. Bitte nochmal lesen und dabei auf den Code achten, den ich gepostet habe.



  • Was für eine Signatur velangt _pool.create_thead(..)?
    (Ist das was selbstgemachtes oder was von boost, ich meine den Thread Pool?)



  • Es ist eine ganz simple, selbst geschriebene Klasse.

    struct thread_pool
    {
    	template <typename Function>
    	void create_thread(Function f)
    	{
    		threads.emplace_back(new std::thread(std::move(f)));
    	}
    
    	void join_all()
    	{
    		for(auto& t : threads)
    			t->join();
    	}
    
    private:
    	std::vector<std::unique_ptr<std::thread>> threads;
    };
    


  • Nur als Anmerkung (hat AFAIk nichts mit der Warnung zu tun) - std::thread (auch boost::thread) ist movable - es ist also nicht nötig ein std::thread Objekt mit new zu erzeugen.

    Edit:
    Ev. ist bei der std::thread Implementierung die GCC verwendet ein Rückgabe-Type/Wert verlangt (entgegen dem Standard). Hast Du schonmal die Sourcen angeguckt?



  • Kann ich allerdings weder mit gcc 4.6 noch 4.7 nachvollziehen.

    thread_pool pool_;
    struct
    {
      void run() {}
    } service_;
    pool_.create_thread([&] { service_.run(); });
    

    Das gibt bei mir keine Warnung.


Log in to reply