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.