Opened 10 years ago
Last modified 10 years ago
#7361 new Support Requests
Forbid compilation of leaking mistake.
| Reported by: | Owned by: | Vladimir Prus | |
|---|---|---|---|
| Milestone: | To Be Determined | Component: | program_options |
| Version: | Boost 1.51.0 | Severity: | Problem |
| Keywords: | Cc: |
Description
I was adding program_option to my prorgam when I discovered a related leak. Fortunately it was false positive, but it pointed a hidden problem. I used:
- Visual Studio 2012
- Boost 1.51.0
- Visual Leak Detector to detect the leak
This, generate the leak:
#include <boost/program_options.hpp>
int main()
{
namespace bpo = boost::program_options;
bpo::options_description options( "Options" );
options.add_options()
( "test" , "Test." )
, ( "value" , bpo::value<int>(), "Value." )
;
}
The second option is leaking. The reason is because of the comma in the beginning of the line. I first added it by reflex when using function arguments so it took me some time to find what was leaking. Part of the time I spend was figuring out why it don't leak if you don't set a value type:
#include <boost/program_options.hpp>
int main()
{
namespace bpo = boost::program_options;
bpo::options_description options( "Options" );
options.add_options()
( "test" , "Test." )
, ( "value" , "Value." ) // no leak but still wrong!
;
}
The main problem I see with this is that it is compiled without any problem nor warning.
So here is my question: Would it be possible to forbid comma operator with options_description_easy_init?

It does leaks for me as well, when specified bpo::value<std::string>().