From 77e581f467a4838e5111cca11b0587a7d7b5d405 Mon Sep 17 00:00:00 2001 From: silverqx Date: Sun, 13 Nov 2022 16:59:34 +0100 Subject: [PATCH] bugfix std::convertible_to - abandoned cont Xyz & in std::convertible_to<> - made cout/wcout parameter const in the Terminal::hasColorSupport() --- include/orm/ormconcepts.hpp | 21 +++++++++----------- include/orm/query/querybuilder.hpp | 2 +- include/orm/utils/query.hpp | 6 +++--- tom/include/tom/concerns/interactswithio.hpp | 4 ++-- tom/include/tom/terminal.hpp | 20 +++++++++---------- tom/src/tom/concerns/interactswithio.cpp | 4 ++-- tom/src/tom/terminal.cpp | 16 +++++++-------- 7 files changed, 35 insertions(+), 38 deletions(-) diff --git a/include/orm/ormconcepts.hpp b/include/orm/ormconcepts.hpp index fcc7e5749..7534f4d34 100644 --- a/include/orm/ormconcepts.hpp +++ b/include/orm/ormconcepts.hpp @@ -46,7 +46,7 @@ namespace Query /*! Concept for where()'s value parameter. */ template - concept WhereValue = std::convertible_to || + concept WhereValue = std::convertible_to || WhereValueSubQuery; /*! Concept for the join's table parameter. */ @@ -61,30 +61,27 @@ namespace Query /*! Concept for the QString. */ template - concept QStringConcept = std::convertible_to || - std::convertible_to; + concept QStringConcept = std::convertible_to; /*! Type for the database column. */ using Column = std::variant; /*! QString container concept (QStringList or QVector). */ template - concept ColumnContainer = std::convertible_to || - std::convertible_to &> || - std::convertible_to &>; + concept ColumnContainer = std::convertible_to || + std::convertible_to> || + std::convertible_to>; /*! QString container concept (used by ContainerUtils::join()). */ template concept JoinContainer = ColumnContainer || - std::convertible_to &> || - std::convertible_to &> || - std::convertible_to &>; + std::convertible_to> || + std::convertible_to> || + std::convertible_to>; - // CUR concepts, check if const QString & vs QString in convertible_to<> makes sense silverqx /*! Concept for delimiter for joining containers. */ template - concept DelimiterConcept = std::convertible_to || - std::convertible_to || + concept DelimiterConcept = std::convertible_to || std::convertible_to; } // namespace Orm diff --git a/include/orm/query/querybuilder.hpp b/include/orm/query/querybuilder.hpp index d4f857245..902cedc8f 100644 --- a/include/orm/query/querybuilder.hpp +++ b/include/orm/query/querybuilder.hpp @@ -21,7 +21,7 @@ namespace Orm::Query /*! Concept for the remove() method parameter. */ template concept Remove = std::convertible_to || - std::same_as; + std::convertible_to; // TODO querybuilder, whereDay/Month/..., whereFullText silverqx // FUTURE querybuilder, paginator silverqx diff --git a/include/orm/utils/query.hpp b/include/orm/utils/query.hpp index 2c57b3ebb..bd4f337a8 100644 --- a/include/orm/utils/query.hpp +++ b/include/orm/utils/query.hpp @@ -21,11 +21,11 @@ namespace Orm::Utils /*! Concept for a bindings type used in the replaceBindingsInSql(). */ template - concept BindingsConcept = std::convertible_to &> || + concept BindingsConcept = std::convertible_to> || #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) - std::convertible_to; + std::convertible_to; #else - std::convertible_to; + std::convertible_to; #endif /*! Library class for database query. */ diff --git a/tom/include/tom/concerns/interactswithio.hpp b/tom/include/tom/concerns/interactswithio.hpp index a3ed717c6..c9a0117ba 100644 --- a/tom/include/tom/concerns/interactswithio.hpp +++ b/tom/include/tom/concerns/interactswithio.hpp @@ -169,10 +169,10 @@ namespace Concerns bool dontOutput(Verbosity verbosity) const; /*! Should the given output use ansi? (ansi is disabled for non-tty). */ - bool isAnsiOutput(std::ostream &cout = std::cout) const; + bool isAnsiOutput(const std::ostream &cout = std::cout) const; /*! Should the given output use ansi? (ansi is disabled for non-tty), wide version. */ - bool isAnsiWOutput(std::wostream &cout = std::wcout) const; + bool isAnsiWOutput(const std::wostream &cout = std::wcout) const; /*! Write a string as error output (red box with a white text). */ QString errorWallInternal(const QString &string) const; diff --git a/tom/include/tom/terminal.hpp b/tom/include/tom/terminal.hpp index e91042dfc..cf122204a 100644 --- a/tom/include/tom/terminal.hpp +++ b/tom/include/tom/terminal.hpp @@ -36,12 +36,12 @@ namespace Tom static void initialize(); /*! Supports the given output ansi colors? (ansi is disabled for non-tty). */ - bool hasColorSupport(std::ostream &cout = std::cout) const; + bool hasColorSupport(const std::ostream &cout = std::cout) const; /*! Supports the given output ansi colors? (ansi is disabled for non-tty), wide version. */ - bool hasWColorSupport(std::wostream &wcout = std::wcout) const; + bool hasWColorSupport(const std::wostream &wcout = std::wcout) const; - /*! Determines whether a file descriptor is associated with a character device. */ + /*! Determines if a file descriptor is associated with a character device. */ bool isatty(FILE *stream) const; /*! Obtain the current terminal width. */ @@ -69,14 +69,14 @@ namespace Tom private: /*! Supports the given output ansi colors? (common logic). */ template - bool hasColorSupportInternal(O &&cout, FILE *stream) const; + bool hasColorSupportInternal(const O &cout, FILE *stream) const; #ifdef _WIN32 /*! Detect if c++ ostream has enabled virtual terminal processing. */ - bool hasVt100Support(std::ostream &cout) const; + bool hasVt100Support(const std::ostream &cout) const; /*! Detect if c++ wostream has enabled virtual terminal processing, wide version. */ - bool hasVt100Support(std::wostream &wcout) const; + bool hasVt100Support(const std::wostream &wcout) const; #endif /* Terminal initialization */ @@ -90,9 +90,9 @@ namespace Tom #endif /*! Cache for detected ansi output. */ - mutable std::unordered_map m_isAnsiOutput {}; + mutable std::unordered_map m_isAnsiOutput {}; /*! Cache for detected ansi output, wide version. */ - mutable std::unordered_map m_isAnsiWOutput {}; + mutable std::unordered_map m_isAnsiWOutput {}; /*! Current terminal width. */ int m_lastWidth = 80; @@ -115,7 +115,7 @@ namespace Tom /* private */ template - bool Terminal::hasColorSupportInternal(O &&cout, FILE *stream) const + bool Terminal::hasColorSupportInternal(const O &cout, FILE *stream) const { #ifndef _WIN32 Q_UNUSED(cout) @@ -129,7 +129,7 @@ namespace Tom #ifdef _WIN32 return isatty(stream) && - (hasVt100Support(std::forward(cout)) || + (hasVt100Support(cout) || qEnvironmentVariableIsSet("ANSICON") || qEnvironmentVariable("ConEmuANSI") == QStringLiteral("ON") || qEnvironmentVariable("TERM") == QStringLiteral("xterm")); diff --git a/tom/src/tom/concerns/interactswithio.cpp b/tom/src/tom/concerns/interactswithio.cpp index a54d5687f..d7d14a71c 100644 --- a/tom/src/tom/concerns/interactswithio.cpp +++ b/tom/src/tom/concerns/interactswithio.cpp @@ -437,7 +437,7 @@ bool InteractsWithIO::dontOutput(const Verbosity verbosity) const return verbosity > m_verbosity; } -bool InteractsWithIO::isAnsiOutput(std::ostream &cout) const +bool InteractsWithIO::isAnsiOutput(const std::ostream &cout) const { // ansi was set explicitly on the command-line, respect it if (m_ansi) @@ -447,7 +447,7 @@ bool InteractsWithIO::isAnsiOutput(std::ostream &cout) const return m_terminal->hasColorSupport(cout); } -bool InteractsWithIO::isAnsiWOutput(std::wostream &wcout) const +bool InteractsWithIO::isAnsiWOutput(const std::wostream &wcout) const { // ansi was set explicitly on the command-line, respect it if (m_ansi) diff --git a/tom/src/tom/terminal.cpp b/tom/src/tom/terminal.cpp index 562951d9c..9321bb141 100644 --- a/tom/src/tom/terminal.cpp +++ b/tom/src/tom/terminal.cpp @@ -33,9 +33,9 @@ void Terminal::initialize() #endif } -bool Terminal::hasColorSupport(std::ostream &cout) const +bool Terminal::hasColorSupport(const std::ostream &cout) const { - auto *const coutPointer = std::addressof(cout); + const auto *const coutPointer = std::addressof(cout); // Return from the cache, compute only once if (m_isAnsiOutput.contains(coutPointer)) @@ -62,9 +62,9 @@ bool Terminal::hasColorSupport(std::ostream &cout) const return isAnsi; } -bool Terminal::hasWColorSupport(std::wostream &wcout) const +bool Terminal::hasWColorSupport(const std::wostream &wcout) const { - auto *const wcoutPointer = std::addressof(wcout); + const auto *const wcoutPointer = std::addressof(wcout); // Return from the cache, compute only once if (m_isAnsiWOutput.contains(wcoutPointer)) @@ -164,7 +164,7 @@ Terminal::TerminalSize Terminal::terminalSize() const namespace { /*! Get Windows output handle by passed c++ output stream. */ - HANDLE getStdHandleByCppStream(std::ostream &cout = std::cout) + HANDLE getStdHandleByCppStream(const std::ostream &cout = std::cout) { HANDLE handle = nullptr; @@ -181,7 +181,7 @@ namespace } /*! Get Windows output handle by passed c++ output stream, wide version. */ - HANDLE getStdHandleByCppStream(std::wostream &wcout = std::wcout) + HANDLE getStdHandleByCppStream(const std::wostream &wcout = std::wcout) { HANDLE handle = nullptr; @@ -198,7 +198,7 @@ namespace } } // namespace -bool Terminal::hasVt100Support(std::ostream &cout) const +bool Terminal::hasVt100Support(const std::ostream &cout) const { DWORD mode = 0; @@ -209,7 +209,7 @@ bool Terminal::hasVt100Support(std::ostream &cout) const ENABLE_VIRTUAL_TERMINAL_PROCESSING; } -bool Terminal::hasVt100Support(std::wostream &wcout) const +bool Terminal::hasVt100Support(const std::wostream &wcout) const { DWORD mode = 0;