class C #(
    parameter X = 1
);
    localparam Y = X * 2;
endclass

package P;
    localparam W = 5;
endpackage

`define DUMP(expr) $display(`"expr = %0d`", expr);
`define DUMP_BOTH(prefix) `DUMP(prefix::X) `DUMP(prefix::Y)

module top;
    localparam Z = 3;
    initial begin
        `DUMP(Z)
        `DUMP(P::W)
        `DUMP_BOTH(C#())
        `DUMP_BOTH(C#(Z))
        `DUMP_BOTH(C#(P::W))
        `DUMP_BOTH(C#(C#(Z)::Y))
    end
endmodule