And we're proud of it! It's lazy to do things right first and lazy not to want to fight with our code, seeking out bugs. BTW, Unit Testing is getting even lazier with Typemock Isolator V7 (http://www.typemock.com/isolator-v7). It's finding the bugs for you, so you don't have to waste 2 hours hunting around.
Typemock is discussing that in today's webinar (10:00 AM ET and 15:00 in the UK) about tools and practices to help with unit testing - http://bitly.com/z3uPOi
The best thing is to make sure you're using tools that are flexible and scalable. Also, decide what to test. You don't test basic logic like 1+1=2.
Unit tests are intended to catch a specific type of bugs but not all errors. It's not usability testing. If you're not doing TDD (ideally) at least you can test legacy code and strive for high code coverage
C++ definitely also needs unit testing - even with untestable code (even when it's bad code, though not always, it may be easier to test it using something like Isolator++, rather than rewrite greenfield from scratch).
Absolutely - even those of us (like me - disclaimer: I work at Typemock) know that there is a time and a place for unit tests and TDD (not the same thing).
We're hosting a webinar on Wednesday about different kinds of testing and when a unit test is appropriate and when another kind of test, like an integration test, may be a better choice - http://bitly.com/xeYSYg.
Unit tests have a time and place. There are times in which they are a must if you want to reduce technical debt and test your code - both if you're writing mission critical stuff or even when you're writing the latest social sharing app (remember the Fail Whale? We all hate that!). But, no, you don't need TDD on greenfield code all the time and you shouldn't have to write tests for logic.