So, I was poking around in the test cases, and I run across this in cmdline_test.cpp: void test_long_options() { ... test_case test_cases2[] = { {"--bar 10", s_success, "bar:10"}, {"--bar", s_missing_parameter, ""}, ****** // Since --bar accepts a parameter, --foo is // considered a value, even though it looks like // an option. {"--bar --foo", s_success, "bar:--foo"}, ****** {0, 0, 0} }; test_cmdline("foo bar=", style, test_cases2); style = cmdline::style_t( allow_long | long_allow_adjacent | long_allow_next); ... } And further down: void test_short_options() { ... test_case test_cases2[] = { {"-f 13", s_success, "-f:13"}, {"-f -13", s_success, "-f:-13"}, {"-f", s_missing_parameter, ""}, {"-f /foo", s_success, "-f:/foo"}, ****** {"-f -d", s_missing_parameter, ""}, ****** {0, 0, 0} }; test_cmdline(",d ,f=", style, test_cases2); ... } So, it would appear that if both arguments are “long-form” then my problem would go away. But since I’m passing in the short-form arguments (xterm’s –e option has no long-form), I am boned. I think I tried to pass the short-form in as a long form (i.e.: ‘--arg=-e’ and ‘--arg –e’), but I think that these failed as well. Time for some more playing around.........