[cfe-dev] -fsanitize=enum false positive with ˜ios::failbit ?

Brad King brad.king at kitware.com
Thu Feb 28 12:40:55 PST 2013


On 02/28/2013 03:33 PM, Joe Groff wrote:
> On Thu, Feb 28, 2013 at 11:36 AM, Sean McBride wrote:
>> The C++03 standard does "~ios::failbit" in 27.6.1.3/22
> 
> Enum values are only defined for the number of bits needed to
> represent the type's member values, so if 'x' is a defined iostate
> value, then 'x & ~ios::failbit' results in a valid iostate value,
> but ~ios::failbit is not itself a valid iostate value.

The question is actually about the expression from C++03 27.6.1.3/22:

 cin.clear(cin.rdstate() & ~ios::failbit);

C++03 27.4.2 defines iostate and failbit:

 typedef T2 iostate;
 ...
 static const iostate failbit;

C++03 27.4.2.1.3 requires iostate to be a bitmask type:

 The type iostate is a bitmask type (17.3.2.1.2)

C++03 17.3.2.1.2 requires bitmask types to support ~:

 bitmask operator ~(bitmask X)

-Brad



More information about the cfe-dev mailing list