C++ is a language that provides a lot of features that you may chose to use or not. Your decisions should be based on
a) Frameworks you use
b) The domain of your application
c) Your current code base
Frameworks
Some frameworks lend themselves to specific styles. For example, if you are using Qt/KDE/Wt you will usually use their memory model and will not have your own smart pointers. You're unlikely to use exceptions as much. Qt's MOC also has certain implications for templates that limits how much you can do with them.
At the same time, code that is heavily based on boost tends to be heavy in what others have described as 'Modern C++'.
Then you have Google-stylized C++ which is essentially C with classes. http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml
Application Domain
If you are coding software where performance is critical (financial, embedded,etc), a lot of the 'niceties' of C++ might go out the window in favour of limiting memory footprints or CPU cycles. There are situations where C is the 'right' language to use for a small part of the program, but not for the whole thing; C++ allows you to do that so that you can have your pointer arithmetic when doing crazy matrix math but have high level abstractions when combining the modules that use it.
Current Code Base
In the real world, if you are in a shop with 10 C coders who don't want or like C++ you will have a much better time sticking to something like the Google style guide than something that is more 'Modern'. If all your libraries are written in C and you are only gluing them together in C++ then char * might make more sense than going to and from std::string all the time.
Conclusion
C++ is not a langauge that is ideal in any academic sense, but it is a pragmatic compromise that worked out very well. So when using it, you should also have a very pragmatic approach to the problem and not get too bogged down on 'The Right Way Of Doing Things'.
To answer your question: you may or may not be too puritanical, but that depends on the specifics.
void*s, because the templates can be better inlined by the compiler. – Jan Hudec Dec 3 '12 at 9:22