Diferenciar String Literal de Char Array

Quiero escribir alguna función que tome una cadena literal, ysolamente un literal de cadena:

template <size_t N>
void foo(const char (&str)[N]);

Desafortunadamente, eso es demasiado expansivo y coincidirá con cualquier conjunto dechar - si es o no un verdadero literal de cadena. Si bien es imposible saber la diferencia entre estos en tiempo de compilación,sin tener que recurrir a exigir elllamador para envolver el literal / matriz: en tiempo de ejecución, las dos matrices estarán en lugares completamente diferentes en la memoria:

foo("Hello"); // at 0x400f81

const char msg[] = {'1', '2', '3'};
foo(msg); // at 0x7fff3552767f

¿Hay alguna manera de saber en qué lugar de la memoria podrían vivir los datos de la cadena para que al menos pudieraassert que la función solo toma una cadena literal? (Usando gcc 4.7.3, pero realmente una solución para cualquier compilador sería genial).

Respuestas a la pregunta(3)

Su respuesta a la pregunta