Ensure to propagate convert error in parser

Fixes #188.
diff --git a/marshal_test.go b/marshal_test.go
index 095e9e4..0f452af 100644
--- a/marshal_test.go
+++ b/marshal_test.go
@@ -83,6 +83,28 @@
 	assertParseFail(t, ErrMarshal, fmt.Sprintf("invalid argument for flag `%cv' (expected flags.marshalled): `invalid' is not a valid value, please specify `yes' or `no'", defaultShortOptDelimiter), &opts, "-vinvalid")
 }
 
+func TestUnmarshalPositionalError(t *testing.T) {
+	var opts = struct {
+		Args struct {
+			Value marshalled
+		} `positional-args:"yes"`
+	}{}
+
+	parser := NewParser(&opts, Default&^PrintErrors)
+	_, err := parser.ParseArgs([]string { "invalid" })
+
+	msg := "`invalid' is not a valid value, please specify `yes' or `no'"
+
+	if err == nil {
+		assertFatalf(t, "Expected error: %s", msg)
+		return
+	}
+
+	if err.Error() != msg {
+		assertErrorf(t, "Expected error message %#v, but got %#v", msg, err.Error())
+	}
+}
+
 func TestMarshalError(t *testing.T) {
 	var opts = struct {
 		Value marshalledError `short:"v"`
diff --git a/parser.go b/parser.go
index a52647c..eee6e17 100644
--- a/parser.go
+++ b/parser.go
@@ -601,6 +601,7 @@
 		arg := p.positional[0]
 
 		if err := convert(args[0], arg.value, arg.tag); err != nil {
+			p.err = err
 			return err
 		}