Bionic is a very small C library because we have decided to *not* implement various features
of the POSIX standard. we only add functions on a as-needed basis, and there are a few things
we wish we'll never put in there.

this file is here to document explicitely what we don't want to support in Bionic:

- C++ exceptions are not supported. on embedded systems, they lead to extremely larger and
  slower code for no good reason (even when so-called zero-cost exception schemes are
  implemented, they enforce very large numbers of registers spills to the stack, even
  in functions that do not throw an exception themselves).

- pthread cancellation is *not* supported. this seemingly simple "feature" is the source
  of much bloat and complexity in a C library. Besides, you'd better write correct
  multi-threaded code instead of relying on this stuff.

- pthread_once() doesn't support C++ exceptions thrown from the init function, or the init
  function doing a fork().

- locales and wide characters are not supported. we use ICU for all this i18n stuff, which
  is much better than the ill-designed related C libraries functions.

- at the moment, several user-account-related functions like getpwd are stubbed and return
  the values corresponding to root. this will be fixed when we'll be able to have distinct
  users on the Android filesystem. :-(

  see bionic/stubs.c for the details
