I think you are mixing data and metadata.
The first call succeed since int is a value type, and default(int) assigns the value to 0, so it works. This won't do for reference types, since these are assigned initially to null.
I believe the proper approach here is, well, reflection - and iterating over the properties of the type, without the need to create an instance (so the new() restriction is redundant).
public static void IterateTupleMemberTypes<T>() where T : ITuple
{
var tupleGenericArguments = typeof(T).GetGenericArguments();
for (var i = 0; i < tupleGenericArguments.Length; ++i)
{
Console.WriteLine($"Item{i} Type: {tupleGenericArguments[i].Name}");
}
}