Namespaces
Variants
Views
Actions

cpp/named req/BitmaskType

From cppreference.com
< cpp‎ | named req
Revision as of 08:06, 24 July 2012 by Cubbi (Talk | contribs)

Template:cpp/concept/title Template:cpp/concept/navbar

Defines a type that can be used to represent a set of constant values or any combination of those values. This trait is typically implemented by integer types, std::bitset, or enumerations (scoped and unscoped) with additional operator overloads.

Requirements

The bitmask type supports a finite number of bitmask elements, which are distinct values of the bitmask type, such that, for any pair Ci and Cj, Ci & Ci != 0 and Ci & Cj == 0.

The bitwise operators operator&, operator|, operator^, operator~, operator&=, operator|=, and operator^= are defined for values of the bitmask type and have the same semantics as the corresponding built-in operators on unsigned integers would have if the bitmask elements were the distinct integer powers of two.

The following expressions are well-formed and have the following meaning for any BitsetType X

X |= Y sets the value Y in the object X
X &= ~Y clears the value Y in the object X
X&Y != 0 indicates that the value Y is set in the object X

Each representible bitmask element is defined as a constexpr value of the bitmask type.

Usage

The following standard library types satisfy Template:concept:

Code that relies on some particular implementation option (e.g. int n = std::ios_base::hex), is nonportable because std::ios_base::fmtflags is not necessarily implicitly convertible to int.