Always have two overloaded versions of functions that take char * and const char * parameters. Declare (but don't define if not needed) a function that takes const char* as a parameter when you have defined a function that accepts a non-const char* as a parameter. #include <iostream> #include <iomanip> static void foo (char *s) {   std::cout << "non-const " << std::hex << static_cast <void *>(s) << std::endl; } static void foo (char const *s) {   std::cout << "const " << std::hex << static_cast <void const *>(s) } int main (void) {   char * c1 = "Literal String 1";   char const * c2 = "Literal String 1";   foo (c1);   foo (c2);   foo ("Literal String 1");   //*c1 = 'l'; // This will cause a seg-fault on Linux.   std::cout << c2 << std::endl;   return 0; } Because of default conversion rule from string literal to char *, the call to foo using in-pla...
A blog on various topics in C++ programming including language features, standards, idioms, design patterns, functional, and OO programming.