Effective C++: 50 Specific Ways to Improve Your Programs and Designs