1C++11 in Skia 2============= 3 4Skia is exploring the use of C++11. As a library, we are technically limited 5by what our clients support and what our build bots support. 6 7Skia may also be limited by restrictions we choose put on ourselves. This 8document is not concerned with C++11 policy in Skia, only its technical 9feasibility. This is about what we can use, a superset of what we may use. 10 11The gist: 12 13- C++11 the language as supported by GCC 4.4 or later is probably usable. 14- If you break a bot, that feature is not usable. 15- The C++11 standard library can't generally be used. 16- Local statics are not thread safe. 17 18 19Clients 20------- 21 22The clients we pay most attention to are Chrome, Android, Mozilla, and a few 23internal Google projects. 24 25Chrome builds with a recent Clang on Mac and Linux and with a recent MSVC on 26Windows. These toolchains are new enough to not be the weak link to use any 27C++11 language feature. But Chrome still supports Mac OS X 10.6, which does 28not ship with a C++11 standard library. So [Chrome has banned the use of the 29C++11 standard library](http://chromium-cpp.appspot.com/). Some header-only 30features are probably technically fine, but the Mac toolchain will prevent us 31from even trying at compile time as long as we target 10.6 as our minimum API 32level. 33 34Chrome intentionally disables thread-safe initialization of static variables, 35and MSVC doesn't support it at all, so we cannot rely on that. 36 37Android builds with either a recent GCC or a recent Clang. They're generally 38not a weak link for C++11 language features. Android's C++ standard library 39has always been a pain, but since we can't use it anyway (see Chrome), don't 40worry about it. 41 42Mozilla's current weak link is a minimum requirement of GCC 4.6. Most features 43marked in red on Mozilla's C++11 [feature 44matrix](https://developer.mozilla.org/en-US/docs/Using_CXX_in_Mozilla_code) are 45marked that way because they arrived in GCC 4.7 or GCC 4.8. Their 46minimum-supported Clang and MSVC toolchains are great. They also appear to ban 47the C++ standard library. 48 49Internal Google projects tend to support C++11 completely, including the 50full C++11 standard library. 51 52 53Bots 54---- 55 56Most of our bots are pretty up-to-date: the Windows bots use MSVC 2013, the Mac 57bots a recent Clang, and the Linux bots GCC 4.8 or a recent Clang. Our Android 58bots use a recent toolchain from Android (see above), and our Chrome bots use 59Chrome's toolchains (see above). I'm not exactly sure what our Chrome OS bots 60are using, but they've never been a problem. 61 62A few miscellaneous compile-only bots are actually our current overall weak link: 63 64- Our iOS builds are driven from a Mac 10.7 machine using some unknown old Clang. 65 Who knows how old that is or what it supports? It's probably due for an update. 66 67If we were to eliminate the problems of iOS bots, our ability to 68use C++11 would match Mozilla's list nearly identically. 69