Type Compatibility for successfully fetching resource

LRM 6.22 mentions ::

There are five levels of type compatibility, formally defined here: matching, equivalent, assignment compatible, cast compatible, and nonequivalent.

(1) If I were to set a resource ::

uvm_config_db #( config_class#( int p = 1, type T = int ) ) :: set( null , "<hierarchy>" ,.. )

For the get to succeed ( assuming hierarchy matches ),
what is the criteria for the type and value parameters of config_class ?
Should they be matching types OR equivalent types ?

(2) If the set consists of only value parameters

uvm_config_db #( config_class2#( 32,64 ) ) :: set( null , "<hierarchy>" ,.. )

The value parameters 32 , 64 are 32-bit signed type so I were to fetch the resource via ::

// Assume that hierarchy matches 
if( ! uvm_config_db #( config_class2#( 32'd32,32'd64 ) ) :: get( this , "" ,.. )
 `uvm_fatal( ... ) 

Since the value parameters for get are unsigned type, it would be unsuccessful right ?

Section 8.25 Parameterized classes defines matching types and unique values for class specializations.

Assuming you declared your parameters with an explicit data type int, the two set()s have matching types and values.

module top;
  class config1#(p=1); // implicit datatype - override determines final type
  endclass
  class config2#(int p=1); // explicit data type - override value will be cast to this type
  endclass
  config1#(    2) c1_signed=new;
  config1#(32'd2) c1_unsigned=new;
  config2#(    2) c2_signed=new;
  config2#(32'd2) c2_unsigned=new;
  initial begin
    $cast(c1_signed,c1_unsigned); //fails
    $cast(c2_signed,c2_unsigned); // succeeds 
  end
endmodule