Eigen
3.3.3

These are the possible bits which can be OR'ed to constitute the flags of a matrix or expression.
It is important to note that these flags are a purely compiletime notion. They are a compiletime property of an expression type, implemented as enum's. They are not stored in memory at runtime, and they do not incur any runtime overhead.
Variables  
const unsigned int  Eigen::ActualPacketAccessBit 
EIGEN_DEPRECATED const unsigned int  Eigen::AlignedBit 
const unsigned int  Eigen::CompressedAccessBit 
const unsigned int  Eigen::DirectAccessBit 
EIGEN_DEPRECATED const unsigned int  Eigen::EvalBeforeAssigningBit 
const unsigned int  Eigen::EvalBeforeNestingBit 
const unsigned int  Eigen::LinearAccessBit 
const unsigned int  Eigen::LvalueBit 
const unsigned int  Eigen::NoPreferredStorageOrderBit 
const unsigned int  Eigen::PacketAccessBit 
const unsigned int  Eigen::RowMajorBit 
const unsigned int Eigen::ActualPacketAccessBit 
If vectorization is enabled (EIGEN_VECTORIZE is defined) this constant is set to the value PacketAccessBit.
If vectorization is not enabled (EIGEN_VECTORIZE is not defined) this constant is set to the value 0.
EIGEN_DEPRECATED const unsigned int Eigen::AlignedBit 
const unsigned int Eigen::CompressedAccessBit 
Means that the underlying coefficients can be accessed through pointers to the sparse (un)compressed storage format, that is, the expression provides:
const unsigned int Eigen::DirectAccessBit 
Means that the underlying array of coefficients can be directly accessed as a plain strided array. The memory layout of the array of coefficients must be exactly the natural one suggested by rows(), cols(), outerStride(), innerStride(), and the RowMajorBit. This rules out expressions such as Diagonal, whose coefficients, though referencable, do not have such a regular memory layout.
See the comment on LvalueBit for an explanation of how LvalueBit and DirectAccessBit are mutually orthogonal.
EIGEN_DEPRECATED const unsigned int Eigen::EvalBeforeAssigningBit 
const unsigned int Eigen::EvalBeforeNestingBit 
means the expression should be evaluated by the calling expression
const unsigned int Eigen::LinearAccessBit 
Short version: means the expression can be seen as 1D vector.
Long version: means that one can access the coefficients of this expression by coeff(int), and coeffRef(int) in the case of a lvalue expression. These indexbased access methods are guaranteed to not have to do any runtime computation of a (row, col)pair from the index, so that it is guaranteed that whenever it is available, indexbased access is at least as fast as (row,col)based access. Expressions for which that isn't possible don't have the LinearAccessBit.
If both PacketAccessBit and LinearAccessBit are set, then the packets of this expression can be accessed by packet(int), and writePacket(int) in the case of a lvalue expression.
Typically, all vector expressions have the LinearAccessBit, but there is one exception: Product expressions don't have it, because it would be troublesome for vectorization, even when the Product is a vector expression. Thus, vector Product expressions allow indexbased coefficient access but not indexbased packet access, so they don't have the LinearAccessBit.
const unsigned int Eigen::LvalueBit 
Means the expression has a coeffRef() method, i.e. is writable as its individual coefficients are directly addressable. This rules out readonly expressions.
Note that DirectAccessBit and LvalueBit are mutually orthogonal, as there are examples of expression having one but note the other:
Expressions having LvalueBit also have their coeff() method returning a const reference instead of returning a new value.
const unsigned int Eigen::NoPreferredStorageOrderBit 
for an expression, this means that the storage order can be either rowmajor or columnmajor. The precise choice will be decided at evaluation time or when combined with other expressions.
const unsigned int Eigen::PacketAccessBit 
Short version: means the expression might be vectorized
Long version: means that the coefficients can be handled by packets and start at a memory location whose alignment meets the requirements of the present CPU architecture for optimized packet access. In the fixedsize case, there is the additional condition that it be possible to access all the coefficients by packets (this implies the requirement that the size be a multiple of 16 bytes, and that any nontrivial strides don't break the alignment). In the dynamicsize case, there is no such condition on the total size and strides, so it might not be possible to access all coeffs by packets.
const unsigned int Eigen::RowMajorBit 
for a matrix, this means that the storage order is rowmajor. If this bit is not set, the storage order is columnmajor. For an expression, this determines the storage order of the matrix created by evaluation of that expression.