Commit 955dd950f0607b0c85cdaf82391235b6710c999c
1 parent
8b224fa7
C++11 compliance on older compilers
Showing
2 changed files
with
8 additions
and
10 deletions
include/CLI.hpp
| ... | ... | @@ -603,24 +603,22 @@ protected: |
| 603 | 603 | bool parsed{false}; |
| 604 | 604 | App* subcommand = nullptr; |
| 605 | 605 | |
| 606 | - std::function<void(App*)> app_callback; | |
| 606 | + std::function<void()> app_callback; | |
| 607 | 607 | |
| 608 | 608 | public: |
| 609 | - /// Set a callback to run at the end of parsing | |
| 610 | - App* set_callback(std::function<void(App*)> callback) { | |
| 611 | - app_callback = callback; | |
| 612 | - return this; | |
| 613 | - } | |
| 614 | 609 | |
| 615 | - /// Don't have to worry about explicit App* in argument | |
| 610 | + /// Set a callback for the end of parsing. Due to a bug in c++11, | |
| 611 | + /// it is not possible to overload on std::function (fixed in c++14 | |
| 612 | + /// and backported to c++11 on newer compilers). Use capture by reference | |
| 613 | + /// to get a pointer to App if needed. | |
| 616 | 614 | App* set_callback(std::function<void()> callback) { |
| 617 | - app_callback = [callback](App*){callback();}; | |
| 615 | + app_callback = callback; | |
| 618 | 616 | return this; |
| 619 | 617 | } |
| 620 | 618 | |
| 621 | 619 | void run_callback() { |
| 622 | 620 | if(app_callback) |
| 623 | - app_callback(this); | |
| 621 | + app_callback(); | |
| 624 | 622 | } |
| 625 | 623 | |
| 626 | 624 | /// Reset the parsed data | ... | ... |
tests/CLITest.cpp
| ... | ... | @@ -383,7 +383,7 @@ TEST_F(TApp, BasicSubcommands) { |
| 383 | 383 | |
| 384 | 384 | TEST_F(TApp, Callbacks) { |
| 385 | 385 | auto sub1 = app.add_subcommand("sub1"); |
| 386 | - sub1->set_callback([](CLI::App*){ | |
| 386 | + sub1->set_callback([](){ | |
| 387 | 387 | throw CLI::Success(); |
| 388 | 388 | }); |
| 389 | 389 | auto sub2 = app.add_subcommand("sub2"); | ... | ... |