Because the constructor with the default parameter is not a constructor without parameters.
The default parameters are "populated" by the compiler at compile time. When you write:
var foo = new Currency();
The compiler generates:
var foo = new Currency(null);
When the class compiles, does the compiler create a constructor that accepts this Guid? parameter Guid? , and also generates some metadata that acts "if the parameter is not specified at compile time, then supply null ." But for a type, a constructor without parameters is not created.
The new() constraint requires a typeless constructor to be defined for the type, and it will not accept a constructor with a single default parameter. Most likely, due to the fact that the runtime, which ultimately calls the constructor, does not understand the concept of default parameters.
source share