Commit 4af3faef80dc66f9b1a540059590006de2cb166e

Authored by Henry Fredrick Schreiner
1 parent 33f4c578

Adding forwarding version of hlpers

Showing 1 changed file with 11 additions and 7 deletions
include/CLI/App.hpp
... ... @@ -1048,16 +1048,20 @@ namespace detail {
1048 1048 /// This class is simply to allow tests access to App's protected functions
1049 1049 struct AppFriend {
1050 1050  
1051   - /// Wrap _parse_short
1052   - static void parse_short(App* app, std::vector<std::string> &args) {
1053   - return app->_parse_short(args);
  1051 + /// Wrap _parse_short, perfectly forward arguments and return
  1052 + template<typename ...Args>
  1053 + static auto parse_short(App* app, Args && ...args)
  1054 + -> typename std::result_of<decltype(&App::_parse_short)(App, Args...)>::type {
  1055 + return app->_parse_short(std::forward<Args>(args)...);
1054 1056 }
1055 1057  
1056   - /// Wrap _parse_long
1057   - static void parse_long(App* app, std::vector<std::string> &args) {
1058   - return app->_parse_long(args);
  1058 +
  1059 + /// Wrap _parse_long, perfectly forward arguments and return
  1060 + template<typename ...Args>
  1061 + static auto parse_long(App* app, Args && ...args)
  1062 + -> typename std::result_of<decltype(&App::_parse_long)(App, Args...)>::type {
  1063 + return app->_parse_long(std::forward<Args>(args)...);
1059 1064 }
1060   -
1061 1065  
1062 1066 };
1063 1067 }
... ...