Если ставить задачу "ни в коем случае не приводить тип", то мой
вариант даёт решение. Кстати, при помощи C99 compound literals
можно ещё ближе подойти к совершенству: struct s
{
struct s (*f)(int);
};
struct s func1(int arg)
{
struct s func2(int);
return (struct s){func2};
}
void worker(void)
{
struct s fptr = { func1 };
fptr = (fptr.f)(123);
}