// A Scalar that asserts for uninitialized access. template class SafeScalar { public: SafeScalar() : initialized_(false) {} SafeScalar(const T& val) : val_(val), initialized_(true) {} template explicit SafeScalar(const Source& val) : SafeScalar(T(val)) {} operator T() const { VERIFY(initialized_ && "Uninitialized access."); return val_; } template explicit operator Target() const { return Target(this->operator T()); } private: T val_; bool initialized_; }; namespace Eigen { template struct NumTraits> : GenericNumTraits { enum { RequireInitialization = 1 }; }; } // namespace Eigen