Verifique o tipo de string (por exemplo, literal, array, ponteiro) passada para uma função [duplicate]

Esta pergunta já tem uma resposta aqui:

Restrict passou o parâmetro para uma string literal respostas

Tenho uma função, que aceita uma matriz de caracteres e seu tamanho:

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

A função é agrupada por uma macro como:

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

Meu problema é que, de alguma forma, quero proibir ou informar o usuário que apenas a string literal deve ser passada para essa função. Porque, se qualquer ponteiro ou matriz local for armazenado dentro do mapa, eles poderão sair do escopo e criar um caos!

Existe alguma maneira em tempo de compilação (preferencial) ou pelo menos em tempo de execuçã

questionAnswers(3)

yourAnswerToTheQuestion