I would not recommend either C or C++ if you are really serious about type safety and reliability. However, if you do not want to consider anything else, your best bet would be to choose a system which allows you to check that your code conforms to the MISRA guidelines for the use of C / C++ in critical systems:
http://en.wikipedia.org/wiki/MISRA_C
We took a different approach altogether and ported Niklaus Wirth's ARM Oberon compiler so that we could use it to target the LPC2000 and Cortex-M3 MCUs. As Oberon is a direct descendant of Modula-2 it is ideal for use in devloping type-safe and reliable software and has additional features suited to the sort of low-level programming required when targeting MCUs. We now sell and support the resulting development system (Astrobe):
http://www.astrobe.com
An analysis of the MISRA guidelines showed that about 70% were redundant when applied to the Oberon programming language - it does not allow you to shoot yourself in the foot as easily as you can do with C.
There have also been some encouraging recent developments enabling the C# programming language to be used to develop embedded software:
http://en.wikipedia.org/wiki/.NET_Micro_Framework
Unfortunately, the larger footprint required for the .NET Micro framework (300kB ROM, 64 kB RAM) rules it out for many of the smaller MCUs typically used by SparkFun customers.