Opened 10 years ago

Last modified 10 years ago

#7361 new Support Requests

Forbid compilation of leaking mistake.

Reported by: mjklaim@… 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?

Change History (1)

comment:1 by anonymous, 10 years ago

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

Note: See TracTickets for help on using tickets.