Люди любят спорить глупости иногда. Я имею в виду, что если мы действительно педантичны, я даже не знаю, гарантирует ли стандарт, что строковый литерал не может выйти из области видимости. Но разумный компилятор никогда бы этого не сделал. Никакая форма не является на 100% безопасной, определенный программист может обойти как функцию, так и макрос. Тем не менее, они оба помогают защитить код от небольших ошибок, что очень помогает.

от вопрос уже есть ответ здесь:

Ограничить передаваемый параметр строковым литералом 6 ответов

У меня есть функция, которая принимает массив символов и его размер:

void store_string (const char *p, size_t size); // 'p' & 'size' stored in map

Функция обернута макросом как:

#define STORE_STRING(X) store_string(X, sizeof(X))

Моя проблема в том, что я хочу каким-то образом запретить или сообщить пользователю, что в эту функцию должен быть передан только строковый литерал. Потому что, если какой-либо указатель или локальный массив хранятся внутри карты, они могут выйти из области видимости и создать хаос!

Есть ли способ компиляции (предпочтительный) или хотя бы способ выполнения?