View programming pattern in C++ without raw pointers
The intentions are clearly expressed, the code is clean and easily understood. As far as I can see there is no obvious problems.
clang-600.0.57 failed to compile the example:

./view.h:15:9: error: unknown type name 'Data'
  const Data&amp; data_;
        ^
./view.h:16:14: error: unknown type name 'Data'
  View(const Data&amp; data) : data_(data) {}
             ^


I don't know what Standard mandates here. Fix is simple: add a forward declaration class Data; to view.h.
In general I am not sure that this is a right approach. Data must be aware of View anyway (for example, to add another View you need to modify Data). So implementing views as member functions seems more direct.