Дифференцировать строковый литерал от массива Char

Я хочу написать некоторую функцию, которая принимает строковый литерал - итолько строковый литерал:

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

К сожалению, это слишком обширно и будет соответствовать любому массивуchar - действительно ли это истинный строковый литерал. Хотя невозможно сказать разницу между ними во время компиляции -без приходится прибегать к требованиюгость обернуть литерал / массив - во время выполнения два массива будут находиться в совершенно разных местах памяти:

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

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

Есть ли способ узнать, где в памяти могут жить строковые данные, чтобы я мог хотя быassert что функция принимает только строковый литерал? (Использование gcc 4.7.3, но на самом деле решение для любого компилятора будет отличным).

Ответы на вопрос(3)

Ваш ответ на вопрос