+ if(l.empty())
+ throw invalid_argument("GetOpt::add_option");
+ if(t.is_list() && a!=REQUIRED_ARG)
+ throw invalid_argument("GetOpt::add_option");
+
+ for(OptionList::iterator i=opts.begin(); i!=opts.end(); )
+ {
+ if((s!=0 && (*i)->get_short()==s) || (*i)->get_long()==l)
+ {
+ delete *i;
+ opts.erase(i++);
+ }
+ else
+ ++i;
+ }
+
+ opts.push_back(new OptionImpl(s, l, t, a));
+ return *opts.back();
+}
+
+GetOpt::OptionImpl &GetOpt::get_option(char s)
+{
+ for(OptionList::iterator i=opts.begin(); i!=opts.end(); ++i)