Wargus / stratagus

The Stratagus strategy game engine
GNU General Public License v2.0
615 stars 115 forks source link

Remove `union` in `struct Settings` (type punning is UB in C++). #656

Closed Jarod42 closed 2 months ago

ipochto commented 2 months ago

Got this:

/src/include/settings.h:263:14: error: ‘uint32_t’ in namespace ‘std’ does not name a type; did you mean ‘wint_t’?
[build]   263 |         std::uint32_t getBitfield() const
[build]       |              ^~~~~~~~
[build]       |              wint_t
[build] stratagus/src/include/settings.h:268:26: error: ‘std::uint32_t’ has not been declared
[build]   268 |         void setBitfield(std::uint32_t bitfield)
[build]       |                          ^~~
[build] stratagus/src/include/settings.h: In member function ‘bool Settings::operator==(const Settings&) const’:
[build]stratagus/src/include/settings.h:296:25: error: ‘getBitfield’ was not declared in this scope; did you mean ‘setBitfield’?
[build]   296 |                         getBitfield() == other.getBitfield();
[build]       |                         ^~~~~~~~~~~
[build]       |                         setBitfield
[build] stratagus/src/include/settings.h:296:48: error: ‘const struct Settings’ has no member named ‘getBitfield’; did you mean ‘setBitfield’?
[build]   296 |                         getBitfield() == other.getBitfield();
[build]       |                                                ^~~~~~~~~~~
[build]       |                                                setBitfield
[build] stratagus/src/include/settings.h: In member function ‘void Settings::Save(const std::function<void(std::__cxx11::basic_string<char>)>&, bool)’:
[build] stratagus/src/include/settings.h:316:60: error: ‘getBitfield’ was not declared in this scope; did you mean ‘setBitfield’?
[build]   316 |                 f(std::string("Flags = ") + std::to_string(getBitfield()));
[build]       |                                                            ^~~~~~~~~~~
[build]       |                                                            setBitfield

unit32_t without std:: is ok.

Jarod42 commented 2 months ago

Should be fixed by https://github.com/Wargus/stratagus/pull/660