Behavior of function without input arguments in Constraint

While surfing through blogs and other posts I saw an example of calling a constraint without input argument

Normally when I have a function with input arguments ::


class Main ;

  rand bit [3:0] a , b ;

  constraint FUNC {   b == FUNC( a ) ; } 

  constraint AA { a == 5 ; }


  function int FUNC ( input bit [3:0] A ) ;
    // Some Logic generally but I simply write ::
      return A ;
  endfunction
endclass

So this would have an implicit ordering

(1) First input to the function ( FUNC ) is solved i.e a is constrained to be 5 first
(2) Then function gets called and its return value is assigned to b ( So in our case b will be assigned 5 )

If I modify the code to ::


class Main ;

  rand bit [3:0] a , b ;

  constraint FUNC {   b == FUNC() ; } 

  constraint AA { a == 5 ; }


  function int FUNC ( ) ; // No arguments as input !!
      return A ;
  endfunction

endclass

How do the constraint get solved ?

Please correct me if wrong , LRM doesn’t talk about function without arguments used in Constraints .

In reply to TC_2017:

This is an open issue in the SystemVerilog LRM. The intent is the return value of a function used in a constraint must solely be determined by its inputs. Thus a function with no inputs would only return the same constant value. Otherwise, the results are undefined.