Both by accident and by design, C++ supports a number of different styles and approaches to programming. Its evolution from C gives it obvious support for a procedural systems programming style based on C idioms, but past, present and future language support opens up a wealth of other approaches and idioms, including object-oriented programming, generic programming and some elements of functional programming. This diversity is both a strength and a weakness. It can lead to code that is crisp and well matched to its problem. But it can also lead to code that is at best considered an exercise in groundless post-modernism or, less favorably, an unmaintainable and incoherent mess. This talk examines some of the styles and approaches, including their key strengths and accidental complexities, as well as consequences of and techniques for combining them.