Good point. I don't see any reason for not moving plugins/CommonCwiseUnaryOps.h from ArrayBase/MatrixBase to DenseBase. (the file CommonCwiseUnaryOps.h is where cast all all other common coefficient-wise unary methods are declared).
I guess that it is currently included in ArrayBase/MatrixBase because of the symmetry with "plugins/CommonCwiseBinaryOps.h", this one cannot be moved to DenseBase because binary operators are only valid between expressions of the same kind (e.g., array+matrix is forbidden).
Anyway, it is usually not recommended do directly deal with objects of type DenseBase<Derived>, better cast them to Derived first:
template<typename Derived>
void foo(const DenseBase<Derived> &_arg) {
const Derived &arg(_arg.derived());
...
}
gael