David Stone avatar David Stone committed bfa2239

Improved exception-safety in out-of-memory conditions.

Comments (0)

Files changed (1)

source/clients/network/battles.hpp

 
 class Battles {
 	public:
-		template<typename Battle, typename ... Args>
-		Battle const & add_pending_challenge(std::string const & opponent, Args && ... args) {
-			auto * battle = new Battle(opponent, std::forward<Args>(args)...);
-			challenges.insert(std::make_pair(opponent, Pointer(battle)));
-			return *battle;
+		template<typename SpecificBattle, typename ... Args>
+		SpecificBattle const & add_pending_challenge(std::string const & opponent, Args && ... args) {
+			Pointer battle_ptr(new SpecificBattle(opponent, std::forward<Args>(args)...));
+			auto const & battle = static_cast<SpecificBattle const &>(*battle_ptr);
+			challenges.insert(std::make_pair(opponent, std::move(battle_ptr)));
+			return battle;
 		}
 		void handle_challenge_withdrawn();
 		void handle_challenge_withdrawn(std::string const & opponent);
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.