In the following C++ code, what is M(M) doing and what is the underlying concept? Any directions will be very helpful:
sha256_message_schedule_gadget<FieldT>::sha256_message_schedule_gadget(
    protoboard<FieldT> &pb,
    const pb_variable_array<FieldT> &M,
    const pb_variable_array<FieldT> &packed_W,
    const std::string &annotation_prefix) : gadget<FieldT>(pb, annotation_prefix),
    M(M),
    packed_W(packed_W)
{
    //define something
}
 
    