Skip to content

Commit 4a747b3

Browse files
committed
refactor: the evaluation order of constructor arguments is unspecified in C++
1 parent e948130 commit 4a747b3

1 file changed

Lines changed: 16 additions & 8 deletions

File tree

export/src/fmu4cpp/fmu_base.cpp

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -67,35 +67,43 @@ namespace fmu4cpp {
6767
}
6868

6969
IntVariable fmu_base::integer(const std::string &name, int *ptr, const std::function<void(int)> &onChange) {
70-
return {name, static_cast<unsigned int>(numVariables_), ++numVariables_, ptr, onChange};
70+
const auto vr = static_cast<unsigned int>(numVariables_++);
71+
return {name, vr, numVariables_, ptr, onChange};
7172
}
7273

7374
IntVariable fmu_base::integer(const std::string &name, const std::function<int()> &getter, const std::optional<std::function<void(int)>> &setter) {
74-
return {name, static_cast<unsigned int>(numVariables_), ++numVariables_, getter, setter};
75+
const auto vr = static_cast<unsigned int>(numVariables_++);
76+
return {name, vr, numVariables_, getter, setter};
7577
}
7678

7779
RealVariable fmu_base::real(const std::string &name, double *ptr, const std::function<void(double)> &onChange) {
78-
return {name, static_cast<unsigned int>(numVariables_), ++numVariables_, ptr, onChange};
80+
const auto vr = static_cast<unsigned int>(numVariables_++);
81+
return {name, vr, numVariables_, ptr, onChange};
7982
}
8083

8184
RealVariable fmu_base::real(const std::string &name, const std::function<double()> &getter, const std::optional<std::function<void(double)>> &setter) {
82-
return {name, static_cast<unsigned int>(numVariables_), ++numVariables_, getter, setter};
85+
const auto vr = static_cast<unsigned int>(numVariables_++);
86+
return {name, vr, numVariables_, getter, setter};
8387
}
8488

8589
BoolVariable fmu_base::boolean(const std::string &name, bool *ptr, const std::function<void(bool)> &onChange) {
86-
return {name, static_cast<unsigned int>(numVariables_), ++numVariables_, ptr, onChange};
90+
const auto vr = static_cast<unsigned int>(numVariables_++);
91+
return {name, vr, numVariables_, ptr, onChange};
8792
}
8893

8994
BoolVariable fmu_base::boolean(const std::string &name, const std::function<bool()> &getter, const std::optional<std::function<void(bool)>> &setter) {
90-
return {name, static_cast<unsigned int>(numVariables_), ++numVariables_, getter, setter};
95+
const auto vr = static_cast<unsigned int>(numVariables_++);
96+
return {name, vr, numVariables_, getter, setter};
9197
}
9298

9399
StringVariable fmu_base::string(const std::string &name, std::string *ptr, const std::function<void(std::string)> &onChange) {
94-
return {name, static_cast<unsigned int>(numVariables_), ++numVariables_, ptr, onChange};
100+
const auto vr = static_cast<unsigned int>(numVariables_++);
101+
return {name, vr, numVariables_, ptr, onChange};
95102
}
96103

97104
StringVariable fmu_base::string(const std::string &name, const std::function<std::string()> &getter, const std::optional<std::function<void(std::string)>> &setter) {
98-
return {name, static_cast<unsigned int>(numVariables_), ++numVariables_, getter, setter};
105+
const auto vr = static_cast<unsigned int>(numVariables_++);
106+
return {name, vr, numVariables_, getter, setter};
99107
}
100108

101109
void fmu_base::register_variable(IntVariable v) {

0 commit comments

Comments
 (0)