Closed kyllingstad closed 2 months ago
Trying to compile libcosim with GCC 14, I get the following error message:
[...]/src/cosim/scenario_parser.cpp: In function ‘cosim::scenario::scenario cosim::parse_scenario(const std::filesystem::__cxx11::path&, const std::unordered_map<int, manipulable*>&)’: [...]/src/cosim/scenario_parser.cpp:214:21: error: possibly dangling reference to a temporary [-Werror=dangling-reference] 214 | const auto& [index, simulator] = | ^~~~~~~~~~~~~~~~~~ [...]/src/cosim/scenario_parser.cpp:215:27: note: the temporary was destroyed at the end of the full expression ‘cosim::{anonymous}::find_simulator((* & simulators), cosim::{anonymous}::specified_or_default(const YAML::Node&, const std::string&, std::optional<std::__cxx11::basic_string<char> >)(std::__cxx11::basic_string<char>(((const char*)"model"), std::allocator<char>()), std::optional<std::__cxx11::basic_string<char> >(defaultOpts.cosim::{anonymous}::defaults::model)))’ 215 | find_simulator(simulators, specified_or_default(event, "model", defaultOpts.model)); | ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In other words, the problem is that find_simulator() returns by value, not by reference, but we still try to capture the result by reference.
find_simulator()
The fix is simple: Just drop the & in line 214.
&
Trying to compile libcosim with GCC 14, I get the following error message:
In other words, the problem is that
find_simulator()
returns by value, not by reference, but we still try to capture the result by reference.The fix is simple: Just drop the
&
in line 214.