The type of A(3) is irrelevant. The value constructor A(int) is declared with the syntax A(int) (within an enum), and invoked with the syntax A(int-expr). Similarly with structs, the value constructor Foo { x: uint, y: uint } is declared with the syntax Foo { x: uint, y: uint } (with a preceding struct keyword to indicate a struct definition follows) and invoked with the syntax Foo { x: uint-expr, y: uint-expr }. Also, trivially, the value constructor None is declared with the syntax None (within an enum) and invoked with the syntax None. And for record-structs, the value constructor Bar(uint, char) is declared with the syntax Bar(uint, char) (preceded by the struct keyword) and invoked with the syntax Bar(uint-expr, char-expr).
Offhand I cannot think of any type constructors that have an explicit declaration (e.g. not a built-in type constructor like tules or functions) where the invocation does not reasonably match the declaration.