From f00c5053165fcdd0ec93c2fb773e1ea47382274f Mon Sep 17 00:00:00 2001 From: dragonmux Date: Mon, 21 Aug 2023 15:53:39 +0100 Subject: [PATCH 1/5] console: Added several missing default constructors and opertors for asTime_t --- substrate/console | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/substrate/console b/substrate/console index b5cec50e..01b27aec 100644 --- a/substrate/console +++ b/substrate/console @@ -330,6 +330,11 @@ namespace substrate public: constexpr asTime_t(const uint64_t _value) noexcept : value{_value} { } + constexpr asTime_t(const asTime_t &) noexcept = default; + constexpr asTime_t(asTime_t &&) noexcept = default; + ~asTime_t() noexcept = default; + asTime_t &operator =(const asTime_t &) noexcept = default; + asTime_t &operator =(asTime_t &&) noexcept = default; void operator ()(const consoleStream_t &stream) const noexcept final { From 2c13fe4f4dab54513099f7901a981d0d031aa92c Mon Sep 17 00:00:00 2001 From: dragonmux Date: Mon, 21 Aug 2023 16:28:01 +0100 Subject: [PATCH 2/5] console: Added several missing default constructors and opertors for asInt_t --- substrate/console | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/substrate/console b/substrate/console index 01b27aec..a16e8608 100644 --- a/substrate/console +++ b/substrate/console @@ -225,6 +225,11 @@ namespace substrate public: constexpr asInt_t(const int_t value) noexcept : value_{value} { } + constexpr asInt_t(const asInt_t &) noexcept = default; + constexpr asInt_t(asInt_t &&) noexcept = default; + ~asInt_t() noexcept = default; + asInt_t &operator =(const asInt_t &) noexcept = default; + asInt_t &operator =(asInt_t &&) noexcept = default; void operator()(const consoleStream_t &stream) const noexcept final { printTo(stream); } }; From 85c26a540adc60ab9f1a9058ac10dbd12ca0c664 Mon Sep 17 00:00:00 2001 From: dragonmux Date: Mon, 21 Aug 2023 16:30:17 +0100 Subject: [PATCH 3/5] console: Added several missing default constructors and opertors for asHex_t --- substrate/console | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/substrate/console b/substrate/console index a16e8608..0d57458f 100644 --- a/substrate/console +++ b/substrate/console @@ -262,8 +262,13 @@ namespace substrate constexpr asHex_t(const T value) noexcept : maxDigits{sizeof(T) * 2}, msbShift{uint8_t(4U * (maxDigits - 1U))}, _value(value) { } - SUBSTRATE_NOINLINE - void operator ()(const consoleStream_t &stream) const noexcept final + constexpr asHex_t(const asHex_t &) noexcept = default; + constexpr asHex_t(asHex_t &&) noexcept = default; + ~asHex_t() noexcept = default; + asHex_t &operator =(const asHex_t &) noexcept = default; + asHex_t &operator =(asHex_t &&) noexcept = default; + + SUBSTRATE_NOINLINE void operator ()(const consoleStream_t &stream) const noexcept final { uintmax_t value{_value}; // If we've been asked to pad by more than the maximum possible length of the number From 4c4e788e7325bdc3889165dba989fae7eb5bf498 Mon Sep 17 00:00:00 2001 From: dragonmux Date: Mon, 21 Aug 2023 16:48:51 +0100 Subject: [PATCH 4/5] console: Further tweaked printable_t types while trying to protect from slicing --- substrate/console | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/substrate/console b/substrate/console index 0d57458f..08676c7b 100644 --- a/substrate/console +++ b/substrate/console @@ -34,14 +34,15 @@ namespace substrate struct SUBSTRATE_CLS_API printable_t { - printable_t() = default; + constexpr printable_t() = default; virtual void operator()(const consoleStream_t &) const noexcept = 0; virtual ~printable_t() noexcept = default; - printable_t(const printable_t &) = delete; - printable_t(printable_t &&) = delete; - printable_t &operator =(const printable_t &) = delete; - printable_t &operator =(printable_t &&) = delete; + protected: + constexpr printable_t(const printable_t &) = default; + constexpr printable_t(printable_t &&) = default; + printable_t &operator =(const printable_t &) = default; + printable_t &operator =(printable_t &&) = default; }; struct SUBSTRATE_CLS_API consoleStream_t final @@ -227,7 +228,7 @@ namespace substrate constexpr asInt_t(const int_t value) noexcept : value_{value} { } constexpr asInt_t(const asInt_t &) noexcept = default; constexpr asInt_t(asInt_t &&) noexcept = default; - ~asInt_t() noexcept = default; + ~asInt_t() noexcept final = default; asInt_t &operator =(const asInt_t &) noexcept = default; asInt_t &operator =(asInt_t &&) noexcept = default; void operator()(const consoleStream_t &stream) const noexcept final @@ -264,7 +265,7 @@ namespace substrate constexpr asHex_t(const asHex_t &) noexcept = default; constexpr asHex_t(asHex_t &&) noexcept = default; - ~asHex_t() noexcept = default; + ~asHex_t() noexcept final = default; asHex_t &operator =(const asHex_t &) noexcept = default; asHex_t &operator =(asHex_t &&) noexcept = default; @@ -342,7 +343,7 @@ namespace substrate constexpr asTime_t(const uint64_t _value) noexcept : value{_value} { } constexpr asTime_t(const asTime_t &) noexcept = default; constexpr asTime_t(asTime_t &&) noexcept = default; - ~asTime_t() noexcept = default; + ~asTime_t() noexcept final = default; asTime_t &operator =(const asTime_t &) noexcept = default; asTime_t &operator =(asTime_t &&) noexcept = default; From 6483ea5b4776f9829e95495a836fe1d0a88b11d8 Mon Sep 17 00:00:00 2001 From: dragonmux Date: Mon, 21 Aug 2023 17:02:04 +0100 Subject: [PATCH 5/5] console: Fixed some missing nodiscard markings --- substrate/console | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/substrate/console b/substrate/console index 08676c7b..8553a56f 100644 --- a/substrate/console +++ b/substrate/console @@ -56,8 +56,8 @@ namespace substrate public: constexpr consoleStream_t() noexcept = default; consoleStream_t(const int32_t desc) noexcept : fd{desc} { checkTTY(); } - constexpr bool valid() const noexcept { return fd != -1; } - constexpr bool isTTY() const noexcept { return _tty; } + SUBSTRATE_NO_DISCARD(constexpr bool valid() const noexcept) { return fd != -1; } + SUBSTRATE_NO_DISCARD(constexpr bool isTTY() const noexcept) { return _tty; } #if defined(_WIN32) void *handle() const noexcept { return reinterpret_cast(_get_osfhandle(fd)); } #endif @@ -299,7 +299,7 @@ namespace substrate stream.write(char(digit + 7)); else stream.write(digit); - value <<= 4; + value <<= 4U; } } };