Дифференцировать строковый литерал от массива 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, но на самом деле решение для любого компилятора будет отличным).