for example:
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
}
I want the macro MAKE_CLITERAL to turn any value into a compound literal.
such that doing something like MAKE_CLITERAL( 10 ) and MAKE_CLITERAL( s ) both make compound literals of their type.
I tried doing this:
#define MAKE_CLITERAL(T) ( (typeof(T)){} = T );
but it doesn't behave exactly like a compound literal, so this doesn't work:
&MAKE_CLITERAL(s); // compiler says this is an rvalue
Is there a way to initialize a compound literal by using a value of the same type?
You can wrap the object into an untagged struct type created within the compound literal.