Снимите ограничение структуры на первый метод. Если вам нужно различать типы значений и классы, вы можете использовать тип аргумента для этого.
static void Foo( T? a ) where T : struct
{
// nullable stuff here
}
static void Foo( T a )
{
if( a is ValueType )
{
// ValueType stuff here
}
else
{
// class stuff
}
}