In C++, probably never.  In C, they can be necessary for doing type orthogonal things (like intrusive data structures).  Type generic expressions in C11 can be a bit of a safer alternative for some stuff, but you generally need to give explicit implementations for each type.<p>For example,<p><pre><code>    #define sqrt(x) _Generic((x), long double: sqrtl, float: sqrtf, default: sqrt)(x)</code></pre>