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