SafeScalar.h 605 B

123456789101112131415161718192021222324252627282930
  1. // A Scalar that asserts for uninitialized access.
  2. template<typename T>
  3. class SafeScalar {
  4. public:
  5. SafeScalar() : initialized_(false) {}
  6. SafeScalar(const SafeScalar& other) {
  7. *this = other;
  8. }
  9. SafeScalar& operator=(const SafeScalar& other) {
  10. val_ = T(other);
  11. initialized_ = true;
  12. return *this;
  13. }
  14. SafeScalar(T val) : val_(val), initialized_(true) {}
  15. SafeScalar& operator=(T val) {
  16. val_ = val;
  17. initialized_ = true;
  18. }
  19. operator T() const {
  20. VERIFY(initialized_ && "Uninitialized access.");
  21. return val_;
  22. }
  23. private:
  24. T val_;
  25. bool initialized_;
  26. };