From 63a49bccfdbd2ea89427488ebb781f6134bac7cb Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Sat, 2 Dec 2017 03:37:21 +0100 Subject: [PATCH] Library: define string conversion trait more precisely It is pointless to include pointers.... A pointer to string is not "basically a string", and char is handled explicitly anyway. --- src/lib/meta/trait.hpp | 4 +- tests/15library.tests | 152 +++++++++++++++++++++++++++++ tests/library/format-cout-test.cpp | 21 +++- 3 files changed, 170 insertions(+), 7 deletions(-) diff --git a/src/lib/meta/trait.hpp b/src/lib/meta/trait.hpp index 707ac46bf..57ba9051b 100644 --- a/src/lib/meta/trait.hpp +++ b/src/lib/meta/trait.hpp @@ -266,8 +266,8 @@ namespace meta { /** compare unadorned types, disregarding const and references */ template struct is_basically - : is_same ::TypePlain - ,typename Strip::TypePlain> + : is_same ::TypeReferred + ,typename Strip::TypeReferred> { }; /** detect various flavours of string / text data */ diff --git a/tests/15library.tests b/tests/15library.tests index fd393be54..b238a96b9 100644 --- a/tests/15library.tests +++ b/tests/15library.tests @@ -255,6 +255,158 @@ END TEST "formatting/string conversion in output" FormatCOUT_test < : No +out-lit: BasicallyString : No +out-lit: BasicallyCString : No +out-lit: std::is_arithmetic : Yes +out-lit: can_lexical2string : Yes +out-lit: can_convertToString : No +out-lit: use_StringConversion4Stream : No +out-lit: Type: char ...... +out-lit: is_StringLike : No +out-lit: BasicallyString : No +out-lit: BasicallyCString : No +out-lit: std::is_arithmetic : Yes +out-lit: can_lexical2string : Yes +out-lit: can_convertToString : No +out-lit: use_StringConversion4Stream : No +out-lit: Type: double ...... +out-lit: is_StringLike : No +out-lit: BasicallyString : No +out-lit: BasicallyCString : No +out-lit: std::is_arithmetic : Yes +out-lit: can_lexical2string : Yes +out-lit: can_convertToString : No +out-lit: use_StringConversion4Stream : No +out-lit: Type: int64_t ...... +out-lit: is_StringLike : No +out-lit: BasicallyString : No +out-lit: BasicallyCString : No +out-lit: std::is_arithmetic : Yes +out-lit: can_lexical2string : Yes +out-lit: can_convertToString : No +out-lit: use_StringConversion4Stream : No +out-lit: Type: string ...... +out-lit: is_StringLike : Yes +out-lit: BasicallyString : Yes +out-lit: BasicallyCString : No +out-lit: std::is_arithmetic : No +out-lit: can_lexical2string : Yes +out-lit: can_convertToString : Yes +out-lit: use_StringConversion4Stream : No +out-lit: Type: StringPtr ...... +out-lit: is_StringLike : No +out-lit: BasicallyString : No +out-lit: BasicallyCString : No +out-lit: std::is_arithmetic : No +out-lit: can_lexical2string : No +out-lit: can_convertToString : No +out-lit: use_StringConversion4Stream : No +out-lit: Type: StringRef ...... +out-lit: is_StringLike : Yes +out-lit: BasicallyString : Yes +out-lit: BasicallyCString : No +out-lit: std::is_arithmetic : No +out-lit: can_lexical2string : Yes +out-lit: can_convertToString : Yes +out-lit: use_StringConversion4Stream : No +out-lit: Type: StringRRef ...... +out-lit: is_StringLike : Yes +out-lit: BasicallyString : Yes +out-lit: BasicallyCString : No +out-lit: std::is_arithmetic : No +out-lit: can_lexical2string : Yes +out-lit: can_convertToString : Yes +out-lit: use_StringConversion4Stream : No +out-lit: Type: StrConstRef ...... +out-lit: is_StringLike : No +out-lit: BasicallyString : No +out-lit: BasicallyCString : No +out-lit: std::is_arithmetic : No +out-lit: can_lexical2string : No +out-lit: can_convertToString : Yes +out-lit: use_StringConversion4Stream : Yes +out-lit: Type: CharLit ...... +out-lit: is_StringLike : Yes +out-lit: BasicallyString : No +out-lit: BasicallyCString : Yes +out-lit: std::is_arithmetic : No +out-lit: can_lexical2string : Yes +out-lit: can_convertToString : Yes +out-lit: use_StringConversion4Stream : No +out-lit: Type: CharPtr ...... +out-lit: is_StringLike : Yes +out-lit: BasicallyString : No +out-lit: BasicallyCString : Yes +out-lit: std::is_arithmetic : No +out-lit: can_lexical2string : Yes +out-lit: can_convertToString : Yes +out-lit: use_StringConversion4Stream : No +out-lit: Type: Reticent ...... +out-lit: is_StringLike : No +out-lit: BasicallyString : No +out-lit: BasicallyCString : No +out-lit: std::is_arithmetic : No +out-lit: can_lexical2string : No +out-lit: can_convertToString : No +out-lit: use_StringConversion4Stream : Yes +out-lit: Type: P ...... +out-lit: is_StringLike> : No +out-lit: BasicallyString> : No +out-lit: BasicallyCString> : No +out-lit: std::is_arithmetic> : No +out-lit: can_lexical2string> : No +out-lit: can_convertToString> : Yes +out-lit: use_StringConversion4Stream> : Yes +out-lit: Type: GenNode ...... +out-lit: is_StringLike : No +out-lit: BasicallyString : No +out-lit: BasicallyCString : No +out-lit: std::is_arithmetic : No +out-lit: can_lexical2string : No +out-lit: can_convertToString : Yes +out-lit: use_StringConversion4Stream : Yes +out-lit: Type: GenNodePtr ...... +out-lit: is_StringLike : No +out-lit: BasicallyString : No +out-lit: BasicallyCString : No +out-lit: std::is_arithmetic : No +out-lit: can_lexical2string : No +out-lit: can_convertToString : No +out-lit: use_StringConversion4Stream : No +out-lit: Type: GenNodeRef ...... +out-lit: is_StringLike : No +out-lit: BasicallyString : No +out-lit: BasicallyCString : No +out-lit: std::is_arithmetic : No +out-lit: can_lexical2string : No +out-lit: can_convertToString : Yes +out-lit: use_StringConversion4Stream : Yes +out-lit: Type: GenNodeRRef ...... +out-lit: is_StringLike : No +out-lit: BasicallyString : No +out-lit: BasicallyCString : No +out-lit: std::is_arithmetic : No +out-lit: can_lexical2string : No +out-lit: can_convertToString : Yes +out-lit: use_StringConversion4Stream : Yes +out-lit: Type: P ...... +out-lit: is_StringLike> : No +out-lit: BasicallyString> : No +out-lit: BasicallyCString> : No +out-lit: std::is_arithmetic> : No +out-lit: can_lexical2string> : No +out-lit: can_convertToString> : Yes +out-lit: use_StringConversion4Stream> : Yes +out-lit: ───────────────────────────╼━━━━━━━━━━╾─────────────────────────── +out-lit: smart-ptr, no string conv...«Reticent» +out-lit: smart-ptr, custom conv......GenNode-ID("Hui")-DataCap|«string»|Buh +out-lit: reference, no string conv...«Reticent» +out-lit: reference, custom conv......GenNode-ID("Hui")-DataCap|«string»|Buh +out: pointer, custom conv......╲_....+ ↗GenNode-ID("Hui")-DataCap|«string»|Buh +out-lit: smart-ptr, NULL pointee.....⟂ P +out-lit: pointer, NULL pointee.....⟂ «GenNode» return: 0 END diff --git a/tests/library/format-cout-test.cpp b/tests/library/format-cout-test.cpp index 1e2e9bf88..85bff6d85 100644 --- a/tests/library/format-cout-test.cpp +++ b/tests/library/format-cout-test.cpp @@ -84,13 +84,23 @@ namespace test { { using CharLit = decltype("literal"); using CharPtr = const char*; - using StrCRef = string const&; - using GenNodePtr = GenNode*; - using GenNodeRef = GenNode&; + using StringPtr = string *; + using StringRef = string &; + using StringRRef = string &&; + using StrConstRef = string const&; + using GenNodePtr = GenNode*; + using GenNodeRef = GenNode&; + using GenNodeRRef = GenNode&&; + ANALYSE (int); + ANALYSE (char); ANALYSE (double); + ANALYSE (int64_t); ANALYSE (string); - ANALYSE (StrCRef); + ANALYSE (StringPtr); + ANALYSE (StringRef); + ANALYSE (StringRRef); + ANALYSE (StrConstRef); ANALYSE (CharLit); ANALYSE (CharPtr) ANALYSE (Reticent) @@ -98,8 +108,9 @@ namespace test { ANALYSE (GenNode) ANALYSE (GenNodePtr) ANALYSE (GenNodeRef) + ANALYSE (GenNodeRRef) ANALYSE (P) - cout << endl; + cout << "───────────────────────────╼━━━━━━━━━━╾───────────────────────────"<