Part 1 Part 2 Part 3 Part 4 Part 5 Postscript So far, we’ve dealt with things that are already outputtable with operator<<, and things that are iterable with begin() and end(). To round out the “containers”, we need to deal with pair and tuple. It’s simple to print a pair: template struct stringifier_select {… Continue reading How to print anything in C++ (part 3)
Category: C++
How to print anything in C++ (part 2)
Part 1 Part 2 Part 3 Part 4 Part 5 Postscript We have a basic plan, and the ability to detect concrete types. But how can we detect whether an object supports output with operator<<? For this, there is a recently-discovered amazing trick. Here’s the code: template using void_t = void; template using operator_output_t =… Continue reading How to print anything in C++ (part 2)
How to print anything in C++ (part 1)
Part 1 Part 2 Part 3 Part 4 Part 5 Postscript I thought I’d have a go at writing some code that could print things. A pretty-printer, if you like. What I want to be able to do is this: // Print x correctly, where x is ANY type. cout
C++ Guru Question – followup
(following on from C++ Guru Question) There are a few reasons why the code before didn’t work: mainly a) C++ template argument deduction works one-way with a list of candidates, it’s not H-M type inference. b) A C++ lambda is a thing with some internal type, not a std::function (although it can be assigned to… Continue reading C++ Guru Question – followup
C++ Guru Question
Wondering about this… template argument deduction succeeds for the explicitly-typed variable, fails in the auto case. (Also, it succeeds either way for an equivalently-typed unary operator template). template struct Foo { T m_t; }; template Foo operator/=(Foo foo, function fn) { return fn(foo.m_t); } void mystery() { auto foo = Foo{1}; // this works… function… Continue reading C++ Guru Question
An Interesting C++ Technique
I recently discovered a C++ technique I haven’t seen recognized before in any books, articles, or mentioned online anywhere (search terms are difficult perhaps). For want of a better name I call it Structural Capture. Consider the following code: #include #include using namespace std; //————————————————————— struct Foo { template Foo(const T& t) { m_outputFunc =… Continue reading An Interesting C++ Technique