58 using BasicallyCString = std::is_convertible<T, const char*>;
61 #define SHOW_CHECK(_EXPR_) cout << STRINGIFY(_EXPR_) << "\t : " << (_EXPR_::value? "Yes":"No") << endl; 62 #define ANALYSE(_TYPE_) \ 63 cout << "Type: " STRINGIFY(_TYPE_) " ......"<<endl; \ 64 SHOW_CHECK (is_StringLike<_TYPE_>); \ 65 SHOW_CHECK (BasicallyString<_TYPE_>); \ 66 SHOW_CHECK (BasicallyCString<_TYPE_>); \ 67 SHOW_CHECK (std::is_arithmetic<_TYPE_>); \ 68 SHOW_CHECK (can_lexical2string<_TYPE_>); \ 69 SHOW_CHECK (can_convertToString<_TYPE_>); \ 70 SHOW_CHECK (use_StringConversion4Stream<_TYPE_>); 76 using CharLit = decltype(
"literal");
77 using CharPtr =
const char*;
78 using StringPtr =
string *;
79 using StringRef =
string &;
80 using StringRRef =
string &&;
81 using StrConstRef =
string const&;
94 ANALYSE (StrConstRef);
102 ANALYSE (GenNodeRRef)
104 cout <<
"───────────────────────────╼━━━━━━━━━━╾───────────────────────────"<<endl;
139 auto silent = makeP<Reticent>();
140 auto chatty = makeP<GenNode>(
"Hui",
"Buh");
142 cout <<
"smart-ptr, no string conv..." << silent <<endl;
143 cout <<
"smart-ptr, custom conv......" << chatty <<endl;
145 cout <<
"reference, no string conv..." << *silent <<endl;
146 cout <<
"reference, custom conv......" << *chatty <<endl;
147 cout <<
"pointer, custom conv......" << chatty.get() <<endl;
150 cout <<
"smart-ptr, NULL pointee....." << chatty <<endl;
151 cout <<
"pointer, NULL pointee....." << chatty.get() <<endl;
Customised refcounting smart pointer.
Simplistic test class runner.
Generic building block for tree shaped (meta)data structures.
Helpers for type detection, type rewriting and metaprogramming.
P< X > makeP(ARGS &&... ctorArgs)
Helper to create and manage by lib::P.
Customised refcounting smart pointer template, built upon std::shared_ptr, but forwarding type relati...
generic data element node within a tree