Callable programs with multiple parameter lists

I’d like to have the option to choose from callable programs with different sets of parameters. However, declaring them with a statement like rtBuffer<rtCallableProgramId<float(const float3)> > doesn’t give me this option. Instead, I’ve tried the following:

float3 color = light.color;
if (light.textured)
	color *= ((rtCallableProgramId<float3(const float3, const float3)>)light.function)(ray.direction, -ray.direction);
else
	color *= ((rtCallableProgramId<float(const float3)>)light.function)(ray.direction);

Unfortunately, this only works for one of the callable programs and returns garbage for the other.

If I comment out the if statement and leave only one of the conditional statements, they both work individually. So is there a way I can include options for both method signatures?