por exemplo:
typedef struct S { int i; char c; } S;
#define MAKE_CLITERAL(T) ((typeof(T)) {T})
int main()
{
S s = {.i = 500, .c = 'a'};
S s2 = MAKE_CLITERAL(s); // doesn't compile
}
Quero que a macro MAKE_CLITERAL
transforme qualquer valor em um literal composto.
de modo que fazer algo como MAKE_CLITERAL( 10 )
e MAKE_CLITERAL( s )
ambos criem literais compostos de seu tipo.
Eu tentei fazer isso:
#define MAKE_CLITERAL(T) ( (typeof(T)){} = T );
mas não se comporta exatamente como um literal composto, então isso não funciona:
&MAKE_CLITERAL(s); // compiler says this is an rvalue
Existe uma maneira de inicializar um literal composto usando um valor do mesmo tipo?
Você pode agrupar o objeto em um tipo de estrutura não marcada criada dentro do literal composto.