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.
This commit is contained in:
parent
e379ad82c6
commit
63a49bccfd
3 changed files with 170 additions and 7 deletions
|
|
@ -266,8 +266,8 @@ namespace meta {
|
|||
/** compare unadorned types, disregarding const and references */
|
||||
template<typename T, typename U>
|
||||
struct is_basically
|
||||
: is_same <typename Strip<T>::TypePlain
|
||||
,typename Strip<U>::TypePlain>
|
||||
: is_same <typename Strip<T>::TypeReferred
|
||||
,typename Strip<U>::TypeReferred>
|
||||
{ };
|
||||
|
||||
/** detect various flavours of string / text data */
|
||||
|
|
|
|||
|
|
@ -255,6 +255,158 @@ END
|
|||
|
||||
|
||||
TEST "formatting/string conversion in output" FormatCOUT_test <<END
|
||||
out-lit: Type: int ......
|
||||
out-lit: is_StringLike<int> : No
|
||||
out-lit: BasicallyString<int> : No
|
||||
out-lit: BasicallyCString<int> : No
|
||||
out-lit: std::is_arithmetic<int> : Yes
|
||||
out-lit: can_lexical2string<int> : Yes
|
||||
out-lit: can_convertToString<int> : No
|
||||
out-lit: use_StringConversion4Stream<int> : No
|
||||
out-lit: Type: char ......
|
||||
out-lit: is_StringLike<char> : No
|
||||
out-lit: BasicallyString<char> : No
|
||||
out-lit: BasicallyCString<char> : No
|
||||
out-lit: std::is_arithmetic<char> : Yes
|
||||
out-lit: can_lexical2string<char> : Yes
|
||||
out-lit: can_convertToString<char> : No
|
||||
out-lit: use_StringConversion4Stream<char> : No
|
||||
out-lit: Type: double ......
|
||||
out-lit: is_StringLike<double> : No
|
||||
out-lit: BasicallyString<double> : No
|
||||
out-lit: BasicallyCString<double> : No
|
||||
out-lit: std::is_arithmetic<double> : Yes
|
||||
out-lit: can_lexical2string<double> : Yes
|
||||
out-lit: can_convertToString<double> : No
|
||||
out-lit: use_StringConversion4Stream<double> : No
|
||||
out-lit: Type: int64_t ......
|
||||
out-lit: is_StringLike<int64_t> : No
|
||||
out-lit: BasicallyString<int64_t> : No
|
||||
out-lit: BasicallyCString<int64_t> : No
|
||||
out-lit: std::is_arithmetic<int64_t> : Yes
|
||||
out-lit: can_lexical2string<int64_t> : Yes
|
||||
out-lit: can_convertToString<int64_t> : No
|
||||
out-lit: use_StringConversion4Stream<int64_t> : No
|
||||
out-lit: Type: string ......
|
||||
out-lit: is_StringLike<string> : Yes
|
||||
out-lit: BasicallyString<string> : Yes
|
||||
out-lit: BasicallyCString<string> : No
|
||||
out-lit: std::is_arithmetic<string> : No
|
||||
out-lit: can_lexical2string<string> : Yes
|
||||
out-lit: can_convertToString<string> : Yes
|
||||
out-lit: use_StringConversion4Stream<string> : No
|
||||
out-lit: Type: StringPtr ......
|
||||
out-lit: is_StringLike<StringPtr> : No
|
||||
out-lit: BasicallyString<StringPtr> : No
|
||||
out-lit: BasicallyCString<StringPtr> : No
|
||||
out-lit: std::is_arithmetic<StringPtr> : No
|
||||
out-lit: can_lexical2string<StringPtr> : No
|
||||
out-lit: can_convertToString<StringPtr> : No
|
||||
out-lit: use_StringConversion4Stream<StringPtr> : No
|
||||
out-lit: Type: StringRef ......
|
||||
out-lit: is_StringLike<StringRef> : Yes
|
||||
out-lit: BasicallyString<StringRef> : Yes
|
||||
out-lit: BasicallyCString<StringRef> : No
|
||||
out-lit: std::is_arithmetic<StringRef> : No
|
||||
out-lit: can_lexical2string<StringRef> : Yes
|
||||
out-lit: can_convertToString<StringRef> : Yes
|
||||
out-lit: use_StringConversion4Stream<StringRef> : No
|
||||
out-lit: Type: StringRRef ......
|
||||
out-lit: is_StringLike<StringRRef> : Yes
|
||||
out-lit: BasicallyString<StringRRef> : Yes
|
||||
out-lit: BasicallyCString<StringRRef> : No
|
||||
out-lit: std::is_arithmetic<StringRRef> : No
|
||||
out-lit: can_lexical2string<StringRRef> : Yes
|
||||
out-lit: can_convertToString<StringRRef> : Yes
|
||||
out-lit: use_StringConversion4Stream<StringRRef> : No
|
||||
out-lit: Type: StrConstRef ......
|
||||
out-lit: is_StringLike<StrConstRef> : No
|
||||
out-lit: BasicallyString<StrConstRef> : No
|
||||
out-lit: BasicallyCString<StrConstRef> : No
|
||||
out-lit: std::is_arithmetic<StrConstRef> : No
|
||||
out-lit: can_lexical2string<StrConstRef> : No
|
||||
out-lit: can_convertToString<StrConstRef> : Yes
|
||||
out-lit: use_StringConversion4Stream<StrConstRef> : Yes
|
||||
out-lit: Type: CharLit ......
|
||||
out-lit: is_StringLike<CharLit> : Yes
|
||||
out-lit: BasicallyString<CharLit> : No
|
||||
out-lit: BasicallyCString<CharLit> : Yes
|
||||
out-lit: std::is_arithmetic<CharLit> : No
|
||||
out-lit: can_lexical2string<CharLit> : Yes
|
||||
out-lit: can_convertToString<CharLit> : Yes
|
||||
out-lit: use_StringConversion4Stream<CharLit> : No
|
||||
out-lit: Type: CharPtr ......
|
||||
out-lit: is_StringLike<CharPtr> : Yes
|
||||
out-lit: BasicallyString<CharPtr> : No
|
||||
out-lit: BasicallyCString<CharPtr> : Yes
|
||||
out-lit: std::is_arithmetic<CharPtr> : No
|
||||
out-lit: can_lexical2string<CharPtr> : Yes
|
||||
out-lit: can_convertToString<CharPtr> : Yes
|
||||
out-lit: use_StringConversion4Stream<CharPtr> : No
|
||||
out-lit: Type: Reticent ......
|
||||
out-lit: is_StringLike<Reticent> : No
|
||||
out-lit: BasicallyString<Reticent> : No
|
||||
out-lit: BasicallyCString<Reticent> : No
|
||||
out-lit: std::is_arithmetic<Reticent> : No
|
||||
out-lit: can_lexical2string<Reticent> : No
|
||||
out-lit: can_convertToString<Reticent> : No
|
||||
out-lit: use_StringConversion4Stream<Reticent> : Yes
|
||||
out-lit: Type: P<Reticent> ......
|
||||
out-lit: is_StringLike<P<Reticent>> : No
|
||||
out-lit: BasicallyString<P<Reticent>> : No
|
||||
out-lit: BasicallyCString<P<Reticent>> : No
|
||||
out-lit: std::is_arithmetic<P<Reticent>> : No
|
||||
out-lit: can_lexical2string<P<Reticent>> : No
|
||||
out-lit: can_convertToString<P<Reticent>> : Yes
|
||||
out-lit: use_StringConversion4Stream<P<Reticent>> : Yes
|
||||
out-lit: Type: GenNode ......
|
||||
out-lit: is_StringLike<GenNode> : No
|
||||
out-lit: BasicallyString<GenNode> : No
|
||||
out-lit: BasicallyCString<GenNode> : No
|
||||
out-lit: std::is_arithmetic<GenNode> : No
|
||||
out-lit: can_lexical2string<GenNode> : No
|
||||
out-lit: can_convertToString<GenNode> : Yes
|
||||
out-lit: use_StringConversion4Stream<GenNode> : Yes
|
||||
out-lit: Type: GenNodePtr ......
|
||||
out-lit: is_StringLike<GenNodePtr> : No
|
||||
out-lit: BasicallyString<GenNodePtr> : No
|
||||
out-lit: BasicallyCString<GenNodePtr> : No
|
||||
out-lit: std::is_arithmetic<GenNodePtr> : No
|
||||
out-lit: can_lexical2string<GenNodePtr> : No
|
||||
out-lit: can_convertToString<GenNodePtr> : No
|
||||
out-lit: use_StringConversion4Stream<GenNodePtr> : No
|
||||
out-lit: Type: GenNodeRef ......
|
||||
out-lit: is_StringLike<GenNodeRef> : No
|
||||
out-lit: BasicallyString<GenNodeRef> : No
|
||||
out-lit: BasicallyCString<GenNodeRef> : No
|
||||
out-lit: std::is_arithmetic<GenNodeRef> : No
|
||||
out-lit: can_lexical2string<GenNodeRef> : No
|
||||
out-lit: can_convertToString<GenNodeRef> : Yes
|
||||
out-lit: use_StringConversion4Stream<GenNodeRef> : Yes
|
||||
out-lit: Type: GenNodeRRef ......
|
||||
out-lit: is_StringLike<GenNodeRRef> : No
|
||||
out-lit: BasicallyString<GenNodeRRef> : No
|
||||
out-lit: BasicallyCString<GenNodeRRef> : No
|
||||
out-lit: std::is_arithmetic<GenNodeRRef> : No
|
||||
out-lit: can_lexical2string<GenNodeRRef> : No
|
||||
out-lit: can_convertToString<GenNodeRRef> : Yes
|
||||
out-lit: use_StringConversion4Stream<GenNodeRRef> : Yes
|
||||
out-lit: Type: P<GenNode> ......
|
||||
out-lit: is_StringLike<P<GenNode>> : No
|
||||
out-lit: BasicallyString<P<GenNode>> : No
|
||||
out-lit: BasicallyCString<P<GenNode>> : No
|
||||
out-lit: std::is_arithmetic<P<GenNode>> : No
|
||||
out-lit: can_lexical2string<P<GenNode>> : No
|
||||
out-lit: can_convertToString<P<GenNode>> : Yes
|
||||
out-lit: use_StringConversion4Stream<P<GenNode>> : 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<GenNode>
|
||||
out-lit: pointer, NULL pointee.....⟂ «GenNode»
|
||||
return: 0
|
||||
END
|
||||
|
||||
|
|
|
|||
|
|
@ -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<GenNode>)
|
||||
cout << endl;
|
||||
cout << "───────────────────────────╼━━━━━━━━━━╾───────────────────────────"<<endl;
|
||||
}
|
||||
}//(end)fixture
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue