diff --git a/src/strings_internal.h b/src/strings_internal.h index 38f4cad5f0..976dd7524b 100644 --- a/src/strings_internal.h +++ b/src/strings_internal.h @@ -83,6 +83,7 @@ public: uint64_t GetNextParameter() { struct visitor { + uint64_t operator()(const std::monostate &) { throw std::out_of_range("Attempt to read uninitialised parameter as integer"); } uint64_t operator()(const uint64_t &arg) { return arg; } uint64_t operator()(const std::string &) { throw std::out_of_range("Attempt to read string parameter as integer"); } }; @@ -113,11 +114,12 @@ public: const char *GetNextParameterString() { struct visitor { + const char *operator()(const std::monostate &) { throw std::out_of_range("Attempt to read uninitialised parameter as string"); } const char *operator()(const uint64_t &) { throw std::out_of_range("Attempt to read integer parameter as string"); } const char *operator()(const std::string &arg) { return arg.c_str(); } }; - const auto ¶m = GetNextParameterReference(); + const auto ¶m = this->GetNextParameterReference(); return std::visit(visitor{}, param.data); } diff --git a/src/strings_type.h b/src/strings_type.h index 6446e4d653..d749ac7960 100644 --- a/src/strings_type.h +++ b/src/strings_type.h @@ -72,7 +72,7 @@ static constexpr StringID SPECSTR_SILLY_NAME = 0x70E5; ///< Special string for s static constexpr StringID SPECSTR_ANDCO_NAME = 0x70E6; ///< Special string for Surname & Co company names. static constexpr StringID SPECSTR_PRESIDENT_NAME = 0x70E7; ///< Special string for the president's name. -using StringParameterData = std::variant; +using StringParameterData = std::variant; /** The data required to format and validate a single parameter of a string. */ struct StringParameter { @@ -82,6 +82,7 @@ struct StringParameter { StringParameter() = default; inline StringParameter(StringParameterData &&data) : data(std::move(data)), type(0) {} + inline StringParameter(const std::monostate &data) : data(data), type(0) {} inline StringParameter(uint64_t data) : data(data), type(0) {} inline StringParameter(const char *data) : data(std::string{data}), type(0) {}