Skip to content

Commit

Permalink
fix: Workaround for gcc12 bug with defaulted destructors (#1666)
Browse files Browse the repository at this point in the history
Fixes #1662
  • Loading branch information
godexsoft authored and kuznetsss committed Sep 25, 2024
1 parent f75cbd4 commit 4166c46
Showing 1 changed file with 17 additions and 21 deletions.
38 changes: 17 additions & 21 deletions src/util/newconfig/ConfigConstraints.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -84,11 +84,7 @@ static constexpr std::array<char const*, 1> DATABASE_TYPE = {"cassandra"};
*/
class Constraint {
public:
// using "{}" instead of = default because of gcc bug. Bug is fixed in gcc13
// see here for more info:
// https://stackoverflow.com/questions/72835571/constexpr-c-error-destructor-used-before-its-definition
// https://godbolt.org/z/eMdWThaMY
constexpr virtual ~Constraint() noexcept {}; // NOLINT(modernize-use-equals-default)
constexpr virtual ~Constraint() noexcept = default;

/**
* @brief Check if the value meets the specific constraint.
Expand Down Expand Up @@ -155,7 +151,7 @@ class Constraint {
*/
class PortConstraint final : public Constraint {
public:
constexpr ~PortConstraint() override {}; // NOLINT(modernize-use-equals-default)
constexpr ~PortConstraint() noexcept override = default;

private:
/**
Expand Down Expand Up @@ -185,7 +181,7 @@ class PortConstraint final : public Constraint {
*/
class ValidIPConstraint final : public Constraint {
public:
constexpr ~ValidIPConstraint() override {}; // NOLINT(modernize-use-equals-default)
constexpr ~ValidIPConstraint() noexcept override = default;

private:
/**
Expand Down Expand Up @@ -225,7 +221,7 @@ class OneOf final : public Constraint {
{
}

constexpr ~OneOf() override {}; // NOLINT(modernize-use-equals-default)
constexpr ~OneOf() noexcept override = default;

private:
/**
Expand Down Expand Up @@ -279,7 +275,7 @@ class NumberValueConstraint final : public Constraint {
{
}

constexpr ~NumberValueConstraint() override {}; // NOLINT(modernize-use-equals-default)
constexpr ~NumberValueConstraint() noexcept override = default;

private:
/**
Expand Down Expand Up @@ -320,7 +316,7 @@ class NumberValueConstraint final : public Constraint {
*/
class PositiveDouble final : public Constraint {
public:
constexpr ~PositiveDouble() override {}; // NOLINT(modernize-use-equals-default)
constexpr ~PositiveDouble() noexcept override = default;

private:
/**
Expand All @@ -342,25 +338,25 @@ class PositiveDouble final : public Constraint {
checkValueImpl(Value const& num) const override;
};

static constexpr PortConstraint validatePort{};
static constexpr ValidIPConstraint validateIP{};
static constinit PortConstraint validatePort{};
static constinit ValidIPConstraint validateIP{};

static constexpr OneOf validateChannelName{"channel", Logger::CHANNELS};
static constexpr OneOf validateLogLevelName{"log_level", LOG_LEVELS};
static constexpr OneOf validateCassandraName{"database.type", DATABASE_TYPE};
static constexpr OneOf validateLoadMode{"cache.load", LOAD_CACHE_MODE};
static constexpr OneOf validateLogTag{"log_tag_style", LOG_TAGS};
static constinit OneOf validateChannelName{"channel", Logger::CHANNELS};
static constinit OneOf validateLogLevelName{"log_level", LOG_LEVELS};
static constinit OneOf validateCassandraName{"database.type", DATABASE_TYPE};
static constinit OneOf validateLoadMode{"cache.load", LOAD_CACHE_MODE};
static constinit OneOf validateLogTag{"log_tag_style", LOG_TAGS};

static constexpr PositiveDouble validatePositiveDouble{};
static constinit PositiveDouble validatePositiveDouble{};

static constexpr NumberValueConstraint<uint16_t> validateUint16{
static constinit NumberValueConstraint<uint16_t> validateUint16{
std::numeric_limits<uint16_t>::min(),
std::numeric_limits<uint16_t>::max()
};
static constexpr NumberValueConstraint<uint32_t> validateUint32{
static constinit NumberValueConstraint<uint32_t> validateUint32{
std::numeric_limits<uint32_t>::min(),
std::numeric_limits<uint32_t>::max()
};
static constexpr NumberValueConstraint<uint32_t> validateApiVersion{rpc::API_VERSION_MIN, rpc::API_VERSION_MAX};
static constinit NumberValueConstraint<uint32_t> validateApiVersion{rpc::API_VERSION_MIN, rpc::API_VERSION_MAX};

} // namespace util::config

0 comments on commit 4166c46

Please sign in to comment.