Skip to content

Instantly share code, notes, and snippets.

@unitycoder
Forked from bkaradzic/orthodoxc++.md
Created April 1, 2023 19:19
Show Gist options
  • Select an option

  • Save unitycoder/9164c682183abae2d8abe1a83b55b424 to your computer and use it in GitHub Desktop.

Select an option

Save unitycoder/9164c682183abae2d8abe1a83b55b424 to your computer and use it in GitHub Desktop.

Revisions

  1. @bkaradzic bkaradzic revised this gist Feb 27, 2022. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion orthodoxc++.md
    Original file line number Diff line number Diff line change
    @@ -41,7 +41,7 @@ What should I use?
    - Don't use RTTI.
    - Don't use C++ runtime wrapper for C runtime includes (`<cstdio>`, `<cmath>`, etc.), use C runtime instead (`<stdio.h>`, `<math.h>`, etc.)
    - Don't use stream (`<iostream>`, `<stringstream>`, etc.), use printf style functions instead.
    - Don't use anything from STL that allocates memory, unless you don't care about memory management. See [CppCon 2015: Andrei Alexandrescu "std::allocator Is to Allocation what std::vector Is to Vexation"](https://www.youtube.com/watch?v=LIb3L4vKZ7U) talk for more info.
    - Don't use anything from STL that allocates memory, unless you don't care about memory management. See [CppCon 2015: Andrei Alexandrescu "std::allocator Is to Allocation what std::vector Is to Vexation"](https://www.youtube.com/watch?v=LIb3L4vKZ7U) talk, and [Why many AAA gamedev studios opt out of the STL](https://web.archive.org/web/20220227163717/https://threadreaderapp.com/thread/1497768472184430600.html) thread for more info.
    - Don't use metaprogramming excessively for academic masturbation. Use it in moderation, only where necessary, and where it reduces code complexity.
    - Wary of any features introduced in current standard C++<year>, ideally wait for improvements of those feature in next iteration of standard. Example `constexpr` from C++11 became usable in C++14 ([per Jason Turner](http://archive.md/2018.02.01-171248/https://twitter.com/lefticus/status/958931109009440768) cppbestpractices.com curator)

  2. @bkaradzic bkaradzic revised this gist Jan 16, 2022. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion orthodoxc++.md
    Original file line number Diff line number Diff line change
    @@ -50,7 +50,7 @@ Is it safe to use any of Modern C++<year> features yet?

    Due to lag of adoption of C++ standard by compilers, OS distributions, etc. it's usually not possible to start using new useful language features immediately. General guideline is: if current year is C++_year_+5 then it's safe to start **selectively** using C++_year_'s features. For example, if standard is C++11, and current year >= 2016 then it's probably safe. If standard required to compile your code is C++17 and year is 2016 then obviously you're practicing "Resume Driven Development" methodology. If you're doing this for open source project, then you're not creating something others can use.

    **UPDATE** As of January 14th 2019, Orthodox C++ committee approved use of C++14.
    **UPDATE** As of January 14th 2022, Orthodox C++ committee approved use of C++17.

    Any other similar ideas?
    ------------------------
  3. @bkaradzic bkaradzic revised this gist Sep 28, 2021. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion orthodoxc++.md
    Original file line number Diff line number Diff line change
    @@ -41,7 +41,7 @@ What should I use?
    - Don't use RTTI.
    - Don't use C++ runtime wrapper for C runtime includes (`<cstdio>`, `<cmath>`, etc.), use C runtime instead (`<stdio.h>`, `<math.h>`, etc.)
    - Don't use stream (`<iostream>`, `<stringstream>`, etc.), use printf style functions instead.
    - Don't use anything from STL that allocates memory, unless you don't care about memory management. See CppCon 2015 talk ["std::allocator Is to Allocation what std::vector Is to Vexation"](https://www.youtube.com/watch?v=LIb3L4vKZ7U) for more info.
    - Don't use anything from STL that allocates memory, unless you don't care about memory management. See [CppCon 2015: Andrei Alexandrescu "std::allocator Is to Allocation what std::vector Is to Vexation"](https://www.youtube.com/watch?v=LIb3L4vKZ7U) talk for more info.
    - Don't use metaprogramming excessively for academic masturbation. Use it in moderation, only where necessary, and where it reduces code complexity.
    - Wary of any features introduced in current standard C++<year>, ideally wait for improvements of those feature in next iteration of standard. Example `constexpr` from C++11 became usable in C++14 ([per Jason Turner](http://archive.md/2018.02.01-171248/https://twitter.com/lefticus/status/958931109009440768) cppbestpractices.com curator)

  4. @bkaradzic bkaradzic revised this gist Sep 28, 2021. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion orthodoxc++.md
    Original file line number Diff line number Diff line change
    @@ -41,7 +41,7 @@ What should I use?
    - Don't use RTTI.
    - Don't use C++ runtime wrapper for C runtime includes (`<cstdio>`, `<cmath>`, etc.), use C runtime instead (`<stdio.h>`, `<math.h>`, etc.)
    - Don't use stream (`<iostream>`, `<stringstream>`, etc.), use printf style functions instead.
    - Don't use anything from STL that allocates memory, unless you don't care about memory management.
    - Don't use anything from STL that allocates memory, unless you don't care about memory management. See CppCon 2015 talk ["std::allocator Is to Allocation what std::vector Is to Vexation"](https://www.youtube.com/watch?v=LIb3L4vKZ7U) for more info.
    - Don't use metaprogramming excessively for academic masturbation. Use it in moderation, only where necessary, and where it reduces code complexity.
    - Wary of any features introduced in current standard C++<year>, ideally wait for improvements of those feature in next iteration of standard. Example `constexpr` from C++11 became usable in C++14 ([per Jason Turner](http://archive.md/2018.02.01-171248/https://twitter.com/lefticus/status/958931109009440768) cppbestpractices.com curator)

  5. @bkaradzic bkaradzic revised this gist May 21, 2020. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion orthodoxc++.md
    Original file line number Diff line number Diff line change
    @@ -61,7 +61,7 @@ Any other similar ideas?
    - [Why Your C++ Should Be Simple](http://archive.md/2017.03.19-055108/https://hacksoflife.blogspot.nl/2017/03/why-your-c-should-be-simple.html)
    - [C++, it’s not you. It’s me.](https://web.archive.org/web/20190227061553/https://c0de517e.blogspot.com/2019/02/c-its-not-you-its-me.html)
    - ["Keep It C-mple" Alexander Radchenko Sydney C++ Meetup](https://www.youtube.com/watch?v=lTXHOOwfTAo)
    - ["A dialect of C++"](https://web.archive.org/web/20200521234043/https://satish.net.in/20180302/)
    - [A dialect of C++](https://web.archive.org/web/20200521234043/https://satish.net.in/20180302/)

    Code examples
    -------------
  6. @bkaradzic bkaradzic revised this gist May 21, 2020. 1 changed file with 1 addition and 0 deletions.
    1 change: 1 addition & 0 deletions orthodoxc++.md
    Original file line number Diff line number Diff line change
    @@ -61,6 +61,7 @@ Any other similar ideas?
    - [Why Your C++ Should Be Simple](http://archive.md/2017.03.19-055108/https://hacksoflife.blogspot.nl/2017/03/why-your-c-should-be-simple.html)
    - [C++, it’s not you. It’s me.](https://web.archive.org/web/20190227061553/https://c0de517e.blogspot.com/2019/02/c-its-not-you-its-me.html)
    - ["Keep It C-mple" Alexander Radchenko Sydney C++ Meetup](https://www.youtube.com/watch?v=lTXHOOwfTAo)
    - ["A dialect of C++"](https://web.archive.org/web/20200521234043/https://satish.net.in/20180302/)

    Code examples
    -------------
  7. @bkaradzic bkaradzic revised this gist Feb 7, 2020. 1 changed file with 1 addition and 0 deletions.
    1 change: 1 addition & 0 deletions orthodoxc++.md
    Original file line number Diff line number Diff line change
    @@ -60,6 +60,7 @@ Any other similar ideas?
    - [Sane C++](http://archive.md/2016.08.07-162220/http://flohofwoe.blogspot.nl/2013/06/sane-c.html)
    - [Why Your C++ Should Be Simple](http://archive.md/2017.03.19-055108/https://hacksoflife.blogspot.nl/2017/03/why-your-c-should-be-simple.html)
    - [C++, it’s not you. It’s me.](https://web.archive.org/web/20190227061553/https://c0de517e.blogspot.com/2019/02/c-its-not-you-its-me.html)
    - ["Keep It C-mple" Alexander Radchenko Sydney C++ Meetup](https://www.youtube.com/watch?v=lTXHOOwfTAo)

    Code examples
    -------------
  8. @bkaradzic bkaradzic revised this gist Jul 31, 2019. 1 changed file with 3 additions and 1 deletion.
    4 changes: 3 additions & 1 deletion orthodoxc++.md
    Original file line number Diff line number Diff line change
    @@ -70,4 +70,6 @@ Code examples
    - [dear imgui](https://github.com/ocornut/imgui)
    - [bgfx](https://github.com/bkaradzic/bgfx)
    - [TheForge](https://github.com/ConfettiFX/The-Forge)
    - [Oryol](https://github.com/floooh/oryol)
    - [Oryol](https://github.com/floooh/oryol)
    - [Network Next SDK](https://github.com/networknext/sdk)

  9. @bkaradzic bkaradzic revised this gist Jul 30, 2019. 1 changed file with 7 additions and 8 deletions.
    15 changes: 7 additions & 8 deletions orthodoxc++.md
    Original file line number Diff line number Diff line change
    @@ -9,7 +9,7 @@ Orthodox C++ (sometimes referred as **C+**) is minimal subset of C++ that improv
    Why not Modern C++?
    -------------------

    Back in late 1990 we were also modern-at-the-time C++ hipsters, and we used latest features. We told everyone also they should use those features too. Over time we learned it's unnecesary to use some language features just because they are there, or features we used proved to be bad (like RTTI, exceptions, and streams), or it backfired by unnecessary code complexity. If you think this is nonsense, just wait few more years and [you'll hate Modern C++ too](http://archive.today/2016.05.17-214038/https://www.linkedin.com/pulse/why-i-dont-spend-time-modern-c-anymore-henrique-bucher-phd) ("Why I don't spend time with Modern C++ anymore" archived LinkedIn article).
    Back in late 1990 we were also modern-at-the-time C++ hipsters, and we used latest features. We told everyone also they should use those features too. Over time we learned it's unnecesary to use some language features just because they are there, or features we used proved to be bad (like RTTI, exceptions, and streams), or it backfired by unnecessary code complexity. If you think this is nonsense, just wait few more years and [you'll hate Modern C++ too](http://archive.md/2016.05.17-214038/https://www.linkedin.com/pulse/why-i-dont-spend-time-modern-c-anymore-henrique-bucher-phd) ("Why I don't spend time with Modern C++ anymore" archived LinkedIn article).

    ![d0pfbigxcaeip0m](https://user-images.githubusercontent.com/814772/53454879-839a6480-39dd-11e9-9915-41baca494461.jpg)

    @@ -33,7 +33,7 @@ What should I use?
    ------------------

    - C-like C++ is good start, if code doesn't require more complexity don't add unnecessary C++ complexities. In general case code should be readable to anyone who is familiar with C language.
    - Don't do [this](http://archive.today/2014.04.28-125041/http://www.boost.org/doc/libs/1_55_0/libs/geometry/doc/html/geometry/design.html), the end of "design rationale" in Orthodox C++ should be immedately after "Quite simple, and it is usable. **EOF**".
    - Don't do [this](http://archive.md/2014.04.28-125041/http://www.boost.org/doc/libs/1_55_0/libs/geometry/doc/html/geometry/design.html), the end of "design rationale" in Orthodox C++ should be immedately after "Quite simple, and it is usable. **EOF**".
    - Don't use [exceptions](https://web.archive.org/web/20190116034706/http://www.lighterra.com/papers/exceptionsharmful/).

    > Exception handling is the only C++ language feature which requires significant support from a complex runtime system, and it's the only C++ feature that has a runtime cost even if you don't use it – sometimes as additional hidden code at every object construction, destruction, and try block entry/exit, and always by limiting what the compiler's optimizer can do, often quite significantly. Yet C++ exception specifications are not enforced at compile time anyway, so you don't even get to know that you didn't forget to handle some error case! And on a stylistic note, the exception style of error handling doesn't mesh very well with the C style of error return codes, which causes a real schism in programming styles because a great deal of C++ code must invariably call down into underlying C libraries.
    @@ -43,7 +43,7 @@ What should I use?
    - Don't use stream (`<iostream>`, `<stringstream>`, etc.), use printf style functions instead.
    - Don't use anything from STL that allocates memory, unless you don't care about memory management.
    - Don't use metaprogramming excessively for academic masturbation. Use it in moderation, only where necessary, and where it reduces code complexity.
    - Wary of any features introduced in current standard C++<year>, ideally wait for improvements of those feature in next iteration of standard. Example `constexpr` from C++11 became usable in C++14 ([per Jason Turner](https://archive.fo/DiyFn) cppbestpractices.com curator)
    - Wary of any features introduced in current standard C++<year>, ideally wait for improvements of those feature in next iteration of standard. Example `constexpr` from C++11 became usable in C++14 ([per Jason Turner](http://archive.md/2018.02.01-171248/https://twitter.com/lefticus/status/958931109009440768) cppbestpractices.com curator)

    Is it safe to use any of Modern C++<year> features yet?
    -------------------------------------------------------
    @@ -56,9 +56,9 @@ Any other similar ideas?
    ------------------------

    - [Embedded C++](https://en.wikipedia.org/wiki/Embedded_C%2B%2B)
    - [Nominal C++](http://archive.today/2016.08.07-162105/https://namandixit.github.io/blog/nominal-c++/)
    - [Sane C++](http://archive.today/2016.08.07-162220/http://flohofwoe.blogspot.nl/2013/06/sane-c.html)
    - [Why Your C++ Should Be Simple](http://archive.fo/2017.03.19-055108/https://hacksoflife.blogspot.nl/2017/03/why-your-c-should-be-simple.html)
    - [Nominal C++](http://archive.md/2016.08.07-162105/https://namandixit.github.io/blog/nominal-c++/)
    - [Sane C++](http://archive.md/2016.08.07-162220/http://flohofwoe.blogspot.nl/2013/06/sane-c.html)
    - [Why Your C++ Should Be Simple](http://archive.md/2017.03.19-055108/https://hacksoflife.blogspot.nl/2017/03/why-your-c-should-be-simple.html)
    - [C++, it’s not you. It’s me.](https://web.archive.org/web/20190227061553/https://c0de517e.blogspot.com/2019/02/c-its-not-you-its-me.html)

    Code examples
    @@ -70,5 +70,4 @@ Code examples
    - [dear imgui](https://github.com/ocornut/imgui)
    - [bgfx](https://github.com/bkaradzic/bgfx)
    - [TheForge](https://github.com/ConfettiFX/The-Forge)
    - [Oryol](https://github.com/floooh/oryol)

    - [Oryol](https://github.com/floooh/oryol)
  10. @bkaradzic bkaradzic revised this gist Jul 19, 2019. 1 changed file with 2 additions and 0 deletions.
    2 changes: 2 additions & 0 deletions orthodoxc++.md
    Original file line number Diff line number Diff line change
    @@ -70,3 +70,5 @@ Code examples
    - [dear imgui](https://github.com/ocornut/imgui)
    - [bgfx](https://github.com/bkaradzic/bgfx)
    - [TheForge](https://github.com/ConfettiFX/The-Forge)
    - [Oryol](https://github.com/floooh/oryol)

  11. @bkaradzic bkaradzic revised this gist Jul 13, 2019. 1 changed file with 1 addition and 0 deletions.
    1 change: 1 addition & 0 deletions orthodoxc++.md
    Original file line number Diff line number Diff line change
    @@ -69,3 +69,4 @@ Code examples
    - [Qt](https://github.com/qtproject) (when built with no-rtti, no-exceptions)
    - [dear imgui](https://github.com/ocornut/imgui)
    - [bgfx](https://github.com/bkaradzic/bgfx)
    - [TheForge](https://github.com/ConfettiFX/The-Forge)
  12. @bkaradzic bkaradzic revised this gist Feb 27, 2019. 1 changed file with 1 addition and 0 deletions.
    1 change: 1 addition & 0 deletions orthodoxc++.md
    Original file line number Diff line number Diff line change
    @@ -59,6 +59,7 @@ Any other similar ideas?
    - [Nominal C++](http://archive.today/2016.08.07-162105/https://namandixit.github.io/blog/nominal-c++/)
    - [Sane C++](http://archive.today/2016.08.07-162220/http://flohofwoe.blogspot.nl/2013/06/sane-c.html)
    - [Why Your C++ Should Be Simple](http://archive.fo/2017.03.19-055108/https://hacksoflife.blogspot.nl/2017/03/why-your-c-should-be-simple.html)
    - [C++, it’s not you. It’s me.](https://web.archive.org/web/20190227061553/https://c0de517e.blogspot.com/2019/02/c-its-not-you-its-me.html)

    Code examples
    -------------
  13. @bkaradzic bkaradzic revised this gist Feb 26, 2019. 1 changed file with 2 additions and 0 deletions.
    2 changes: 2 additions & 0 deletions orthodoxc++.md
    Original file line number Diff line number Diff line change
    @@ -11,6 +11,8 @@ Why not Modern C++?

    Back in late 1990 we were also modern-at-the-time C++ hipsters, and we used latest features. We told everyone also they should use those features too. Over time we learned it's unnecesary to use some language features just because they are there, or features we used proved to be bad (like RTTI, exceptions, and streams), or it backfired by unnecessary code complexity. If you think this is nonsense, just wait few more years and [you'll hate Modern C++ too](http://archive.today/2016.05.17-214038/https://www.linkedin.com/pulse/why-i-dont-spend-time-modern-c-anymore-henrique-bucher-phd) ("Why I don't spend time with Modern C++ anymore" archived LinkedIn article).

    ![d0pfbigxcaeip0m](https://user-images.githubusercontent.com/814772/53454879-839a6480-39dd-11e9-9915-41baca494461.jpg)

    Why use Orthodox C++?
    ---------------------

  14. @bkaradzic bkaradzic revised this gist Jan 16, 2019. 1 changed file with 4 additions and 4 deletions.
    8 changes: 4 additions & 4 deletions orthodoxc++.md
    Original file line number Diff line number Diff line change
    @@ -9,7 +9,7 @@ Orthodox C++ (sometimes referred as **C+**) is minimal subset of C++ that improv
    Why not Modern C++?
    -------------------

    Back in late 1990 we were also modern-at-the-time C++ hipsters, and we used latest features. We told everyone also they should use those features too. Over time we learned it's unnecesary to use some language features just because they are there, or features we used proved to be bad (like RTTI, exceptions, and streams), or it backfired by unnecessary code complexity. If you think this is nonsense, just wait few more years and [you'll hate Modern C++ too](http://archive.is/2016.05.17-214038/https://www.linkedin.com/pulse/why-i-dont-spend-time-modern-c-anymore-henrique-bucher-phd) ("Why I don't spend time with Modern C++ anymore" archived LinkedIn article).
    Back in late 1990 we were also modern-at-the-time C++ hipsters, and we used latest features. We told everyone also they should use those features too. Over time we learned it's unnecesary to use some language features just because they are there, or features we used proved to be bad (like RTTI, exceptions, and streams), or it backfired by unnecessary code complexity. If you think this is nonsense, just wait few more years and [you'll hate Modern C++ too](http://archive.today/2016.05.17-214038/https://www.linkedin.com/pulse/why-i-dont-spend-time-modern-c-anymore-henrique-bucher-phd) ("Why I don't spend time with Modern C++ anymore" archived LinkedIn article).

    Why use Orthodox C++?
    ---------------------
    @@ -31,7 +31,7 @@ What should I use?
    ------------------

    - C-like C++ is good start, if code doesn't require more complexity don't add unnecessary C++ complexities. In general case code should be readable to anyone who is familiar with C language.
    - Don't do [this](http://archive.is/2014.04.28-125041/http://www.boost.org/doc/libs/1_55_0/libs/geometry/doc/html/geometry/design.html), the end of "design rationale" in Orthodox C++ should be immedately after "Quite simple, and it is usable. **EOF**".
    - Don't do [this](http://archive.today/2014.04.28-125041/http://www.boost.org/doc/libs/1_55_0/libs/geometry/doc/html/geometry/design.html), the end of "design rationale" in Orthodox C++ should be immedately after "Quite simple, and it is usable. **EOF**".
    - Don't use [exceptions](https://web.archive.org/web/20190116034706/http://www.lighterra.com/papers/exceptionsharmful/).

    > Exception handling is the only C++ language feature which requires significant support from a complex runtime system, and it's the only C++ feature that has a runtime cost even if you don't use it – sometimes as additional hidden code at every object construction, destruction, and try block entry/exit, and always by limiting what the compiler's optimizer can do, often quite significantly. Yet C++ exception specifications are not enforced at compile time anyway, so you don't even get to know that you didn't forget to handle some error case! And on a stylistic note, the exception style of error handling doesn't mesh very well with the C style of error return codes, which causes a real schism in programming styles because a great deal of C++ code must invariably call down into underlying C libraries.
    @@ -54,8 +54,8 @@ Any other similar ideas?
    ------------------------

    - [Embedded C++](https://en.wikipedia.org/wiki/Embedded_C%2B%2B)
    - [Nominal C++](http://archive.is/2016.08.07-162105/https://namandixit.github.io/blog/nominal-c++/)
    - [Sane C++](http://archive.is/2016.08.07-162220/http://flohofwoe.blogspot.nl/2013/06/sane-c.html)
    - [Nominal C++](http://archive.today/2016.08.07-162105/https://namandixit.github.io/blog/nominal-c++/)
    - [Sane C++](http://archive.today/2016.08.07-162220/http://flohofwoe.blogspot.nl/2013/06/sane-c.html)
    - [Why Your C++ Should Be Simple](http://archive.fo/2017.03.19-055108/https://hacksoflife.blogspot.nl/2017/03/why-your-c-should-be-simple.html)

    Code examples
  15. @bkaradzic bkaradzic revised this gist Jan 16, 2019. 1 changed file with 3 additions and 5 deletions.
    8 changes: 3 additions & 5 deletions orthodoxc++.md
    Original file line number Diff line number Diff line change
    @@ -32,13 +32,11 @@ What should I use?

    - C-like C++ is good start, if code doesn't require more complexity don't add unnecessary C++ complexities. In general case code should be readable to anyone who is familiar with C language.
    - Don't do [this](http://archive.is/2014.04.28-125041/http://www.boost.org/doc/libs/1_55_0/libs/geometry/doc/html/geometry/design.html), the end of "design rationale" in Orthodox C++ should be immedately after "Quite simple, and it is usable. **EOF**".
    - Don't use exceptions.
    - Don't use RTTI.

    - Don't use [exceptions](https://web.archive.org/web/20190116034706/http://www.lighterra.com/papers/exceptionsharmful/).

    > Exception handling is the only C++ language feature which requires significant support from a complex runtime system, and it's the only C++ feature that has a runtime cost even if you don't use it – sometimes as additional hidden code at every object construction, destruction, and try block entry/exit, and always by limiting what the compiler's optimizer can do, often quite significantly. Yet C++ exception specifications are not enforced at compile time anyway, so you don't even get to know that you didn't forget to handle some error case! And on a stylistic note, the exception style of error handling doesn't mesh very well with the C style of error return codes, which causes a real schism in programming styles because a great deal of C++ code must invariably call down into underlying C libraries.
    https://web.archive.org/web/20190116034706/http://www.lighterra.com/papers/exceptionsharmful/

    - Don't use RTTI.
    - Don't use C++ runtime wrapper for C runtime includes (`<cstdio>`, `<cmath>`, etc.), use C runtime instead (`<stdio.h>`, `<math.h>`, etc.)
    - Don't use stream (`<iostream>`, `<stringstream>`, etc.), use printf style functions instead.
    - Don't use anything from STL that allocates memory, unless you don't care about memory management.
  16. @bkaradzic bkaradzic revised this gist Jan 16, 2019. 1 changed file with 5 additions and 0 deletions.
    5 changes: 5 additions & 0 deletions orthodoxc++.md
    Original file line number Diff line number Diff line change
    @@ -34,6 +34,11 @@ What should I use?
    - Don't do [this](http://archive.is/2014.04.28-125041/http://www.boost.org/doc/libs/1_55_0/libs/geometry/doc/html/geometry/design.html), the end of "design rationale" in Orthodox C++ should be immedately after "Quite simple, and it is usable. **EOF**".
    - Don't use exceptions.
    - Don't use RTTI.

    > Exception handling is the only C++ language feature which requires significant support from a complex runtime system, and it's the only C++ feature that has a runtime cost even if you don't use it – sometimes as additional hidden code at every object construction, destruction, and try block entry/exit, and always by limiting what the compiler's optimizer can do, often quite significantly. Yet C++ exception specifications are not enforced at compile time anyway, so you don't even get to know that you didn't forget to handle some error case! And on a stylistic note, the exception style of error handling doesn't mesh very well with the C style of error return codes, which causes a real schism in programming styles because a great deal of C++ code must invariably call down into underlying C libraries.
    https://web.archive.org/web/20190116034706/http://www.lighterra.com/papers/exceptionsharmful/

    - Don't use C++ runtime wrapper for C runtime includes (`<cstdio>`, `<cmath>`, etc.), use C runtime instead (`<stdio.h>`, `<math.h>`, etc.)
    - Don't use stream (`<iostream>`, `<stringstream>`, etc.), use printf style functions instead.
    - Don't use anything from STL that allocates memory, unless you don't care about memory management.
  17. @bkaradzic bkaradzic revised this gist Jan 15, 2019. 1 changed file with 2 additions and 0 deletions.
    2 changes: 2 additions & 0 deletions orthodoxc++.md
    Original file line number Diff line number Diff line change
    @@ -45,6 +45,8 @@ Is it safe to use any of Modern C++<year> features yet?

    Due to lag of adoption of C++ standard by compilers, OS distributions, etc. it's usually not possible to start using new useful language features immediately. General guideline is: if current year is C++_year_+5 then it's safe to start **selectively** using C++_year_'s features. For example, if standard is C++11, and current year >= 2016 then it's probably safe. If standard required to compile your code is C++17 and year is 2016 then obviously you're practicing "Resume Driven Development" methodology. If you're doing this for open source project, then you're not creating something others can use.

    **UPDATE** As of January 14th 2019, Orthodox C++ committee approved use of C++14.

    Any other similar ideas?
    ------------------------

  18. @bkaradzic bkaradzic revised this gist Feb 1, 2018. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion orthodoxc++.md
    Original file line number Diff line number Diff line change
    @@ -38,7 +38,7 @@ What should I use?
    - Don't use stream (`<iostream>`, `<stringstream>`, etc.), use printf style functions instead.
    - Don't use anything from STL that allocates memory, unless you don't care about memory management.
    - Don't use metaprogramming excessively for academic masturbation. Use it in moderation, only where necessary, and where it reduces code complexity.
    - Wary of any features introduced in current standard C++<year>, ideally wait for improvements of those feature in next iteration of standard. Example `constexpr` from C++11 became usable in C++14 ([per Jason Turner](https://twitter.com/lefticus/status/958931109009440768) cppbestpractices.com curator)
    - Wary of any features introduced in current standard C++<year>, ideally wait for improvements of those feature in next iteration of standard. Example `constexpr` from C++11 became usable in C++14 ([per Jason Turner](https://archive.fo/DiyFn) cppbestpractices.com curator)

    Is it safe to use any of Modern C++<year> features yet?
    -------------------------------------------------------
  19. @bkaradzic bkaradzic revised this gist Feb 1, 2018. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion orthodoxc++.md
    Original file line number Diff line number Diff line change
    @@ -38,7 +38,7 @@ What should I use?
    - Don't use stream (`<iostream>`, `<stringstream>`, etc.), use printf style functions instead.
    - Don't use anything from STL that allocates memory, unless you don't care about memory management.
    - Don't use metaprogramming excessively for academic masturbation. Use it in moderation, only where necessary, and where it reduces code complexity.
    - Wary of any features introduced in current standard C++<year>, ideally wait for improvements of those feature in next iteration of standard. Example `constexpr` from C++11 became usable in C++14 (per Jason Turner cppbestpractices.com curator https://twitter.com/lefticus/status/958931109009440768)
    - Wary of any features introduced in current standard C++<year>, ideally wait for improvements of those feature in next iteration of standard. Example `constexpr` from C++11 became usable in C++14 ([per Jason Turner](https://twitter.com/lefticus/status/958931109009440768) cppbestpractices.com curator)

    Is it safe to use any of Modern C++<year> features yet?
    -------------------------------------------------------
  20. @bkaradzic bkaradzic revised this gist Feb 1, 2018. 1 changed file with 1 addition and 0 deletions.
    1 change: 1 addition & 0 deletions orthodoxc++.md
    Original file line number Diff line number Diff line change
    @@ -38,6 +38,7 @@ What should I use?
    - Don't use stream (`<iostream>`, `<stringstream>`, etc.), use printf style functions instead.
    - Don't use anything from STL that allocates memory, unless you don't care about memory management.
    - Don't use metaprogramming excessively for academic masturbation. Use it in moderation, only where necessary, and where it reduces code complexity.
    - Wary of any features introduced in current standard C++<year>, ideally wait for improvements of those feature in next iteration of standard. Example `constexpr` from C++11 became usable in C++14 (per Jason Turner cppbestpractices.com curator https://twitter.com/lefticus/status/958931109009440768)

    Is it safe to use any of Modern C++<year> features yet?
    -------------------------------------------------------
  21. @bkaradzic bkaradzic revised this gist Mar 19, 2017. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion orthodoxc++.md
    Original file line number Diff line number Diff line change
    @@ -50,7 +50,7 @@ Any other similar ideas?
    - [Embedded C++](https://en.wikipedia.org/wiki/Embedded_C%2B%2B)
    - [Nominal C++](http://archive.is/2016.08.07-162105/https://namandixit.github.io/blog/nominal-c++/)
    - [Sane C++](http://archive.is/2016.08.07-162220/http://flohofwoe.blogspot.nl/2013/06/sane-c.html)
    - [Why Your C++ Should Be Simple](https://hacksoflife.blogspot.com/2017/03/why-your-c-should-be-simple.html)
    - [Why Your C++ Should Be Simple](http://archive.fo/2017.03.19-055108/https://hacksoflife.blogspot.nl/2017/03/why-your-c-should-be-simple.html)

    Code examples
    -------------
  22. @bkaradzic bkaradzic revised this gist Mar 19, 2017. 1 changed file with 1 addition and 0 deletions.
    1 change: 1 addition & 0 deletions orthodoxc++.md
    Original file line number Diff line number Diff line change
    @@ -50,6 +50,7 @@ Any other similar ideas?
    - [Embedded C++](https://en.wikipedia.org/wiki/Embedded_C%2B%2B)
    - [Nominal C++](http://archive.is/2016.08.07-162105/https://namandixit.github.io/blog/nominal-c++/)
    - [Sane C++](http://archive.is/2016.08.07-162220/http://flohofwoe.blogspot.nl/2013/06/sane-c.html)
    - [Why Your C++ Should Be Simple](https://hacksoflife.blogspot.com/2017/03/why-your-c-should-be-simple.html)

    Code examples
    -------------
  23. @bkaradzic bkaradzic revised this gist Aug 7, 2016. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions orthodoxc++.md
    Original file line number Diff line number Diff line change
    @@ -9,7 +9,7 @@ Orthodox C++ (sometimes referred as **C+**) is minimal subset of C++ that improv
    Why not Modern C++?
    -------------------

    Back in late 1990 we were also modern-at-the-time C++ hipsters, and we used latest features. We told everyone also they should use those features too. Over time we learned it's unnecesary to use some language features just because they are there, or features we used proved to be bad (like RTTI, exceptions, and streams), or it backfired by unnecessary code complexity. If you think this is nonsense, just wait few more years and [you'll hate Modern C++ too](https://archive.is/xYYvh) ("Why I don't spend time with Modern C++ anymore" archived LinkedIn article).
    Back in late 1990 we were also modern-at-the-time C++ hipsters, and we used latest features. We told everyone also they should use those features too. Over time we learned it's unnecesary to use some language features just because they are there, or features we used proved to be bad (like RTTI, exceptions, and streams), or it backfired by unnecessary code complexity. If you think this is nonsense, just wait few more years and [you'll hate Modern C++ too](http://archive.is/2016.05.17-214038/https://www.linkedin.com/pulse/why-i-dont-spend-time-modern-c-anymore-henrique-bucher-phd) ("Why I don't spend time with Modern C++ anymore" archived LinkedIn article).

    Why use Orthodox C++?
    ---------------------
    @@ -31,7 +31,7 @@ What should I use?
    ------------------

    - C-like C++ is good start, if code doesn't require more complexity don't add unnecessary C++ complexities. In general case code should be readable to anyone who is familiar with C language.
    - Don't do [this](http://www.boost.org/doc/libs/1_55_0/libs/geometry/doc/html/geometry/design.html), the end of "design rationale" in Orthodox C++ should be immedately after "Quite simple, and it is usable. **EOF**".
    - Don't do [this](http://archive.is/2014.04.28-125041/http://www.boost.org/doc/libs/1_55_0/libs/geometry/doc/html/geometry/design.html), the end of "design rationale" in Orthodox C++ should be immedately after "Quite simple, and it is usable. **EOF**".
    - Don't use exceptions.
    - Don't use RTTI.
    - Don't use C++ runtime wrapper for C runtime includes (`<cstdio>`, `<cmath>`, etc.), use C runtime instead (`<stdio.h>`, `<math.h>`, etc.)
  24. @bkaradzic bkaradzic revised this gist Aug 7, 2016. 1 changed file with 3 additions and 2 deletions.
    5 changes: 3 additions & 2 deletions orthodoxc++.md
    Original file line number Diff line number Diff line change
    @@ -48,8 +48,9 @@ Any other similar ideas?
    ------------------------

    - [Embedded C++](https://en.wikipedia.org/wiki/Embedded_C%2B%2B)
    - [Sane C++](http://flohofwoe.blogspot.com/2013/06/sane-c.html)

    - [Nominal C++](http://archive.is/2016.08.07-162105/https://namandixit.github.io/blog/nominal-c++/)
    - [Sane C++](http://archive.is/2016.08.07-162220/http://flohofwoe.blogspot.nl/2013/06/sane-c.html)

    Code examples
    -------------

  25. @bkaradzic bkaradzic revised this gist Jul 31, 2016. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion orthodoxc++.md
    Original file line number Diff line number Diff line change
    @@ -9,7 +9,7 @@ Orthodox C++ (sometimes referred as **C+**) is minimal subset of C++ that improv
    Why not Modern C++?
    -------------------

    Back in late 1990 we were also modern-at-the-time C++ hipsters, and we used latest features. We told everyone also they should use those features too. Over time we learned it's unnecesary to use some language features just because they are there, or features we used proved to be bad (like RTTI, exceptions, and streams), or it backfired by unnecessary code complexity. If you think this is nonsense, just wait few more years and [you'll hate Modern C++ too](https://archive.is/xYYvh).
    Back in late 1990 we were also modern-at-the-time C++ hipsters, and we used latest features. We told everyone also they should use those features too. Over time we learned it's unnecesary to use some language features just because they are there, or features we used proved to be bad (like RTTI, exceptions, and streams), or it backfired by unnecessary code complexity. If you think this is nonsense, just wait few more years and [you'll hate Modern C++ too](https://archive.is/xYYvh) ("Why I don't spend time with Modern C++ anymore" archived LinkedIn article).

    Why use Orthodox C++?
    ---------------------
  26. @bkaradzic bkaradzic revised this gist Jul 31, 2016. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion orthodoxc++.md
    Original file line number Diff line number Diff line change
    @@ -9,7 +9,7 @@ Orthodox C++ (sometimes referred as **C+**) is minimal subset of C++ that improv
    Why not Modern C++?
    -------------------

    Back in late 1990 we were also modern-at-the-time C++ hipsters, and we used latest features. We told everyone also they should use those features too. Over time we learned it's unnecesary to use some language features just because they are there, or features we used proved to be bad (like RTTI, exceptions, and streams), or it backfired by unnecessary code complexity. If you think this is nonsense, just wait few more years and [you'll hate Modern C++ too](https://www.linkedin.com/pulse/why-i-dont-spend-time-modern-c-anymore-henrique-bucher-phd).
    Back in late 1990 we were also modern-at-the-time C++ hipsters, and we used latest features. We told everyone also they should use those features too. Over time we learned it's unnecesary to use some language features just because they are there, or features we used proved to be bad (like RTTI, exceptions, and streams), or it backfired by unnecessary code complexity. If you think this is nonsense, just wait few more years and [you'll hate Modern C++ too](https://archive.is/xYYvh).

    Why use Orthodox C++?
    ---------------------
  27. @bkaradzic bkaradzic revised this gist May 18, 2016. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion orthodoxc++.md
    Original file line number Diff line number Diff line change
    @@ -9,7 +9,7 @@ Orthodox C++ (sometimes referred as **C+**) is minimal subset of C++ that improv
    Why not Modern C++?
    -------------------

    Back in late 1990 we were also modern-at-the-time C++ hipsters, and we used latest features. We told everyone also they should use those features too. Over time we learned it's unnecesary to use some language features just because they are there, or features we used proved to be bad (like RTTI, exceptions, and streams), or it backfired by unnecessary code complexity. If you think this is nonsense, just wait few more years and [you'll hate Modern C++](https://www.linkedin.com/pulse/why-i-dont-spend-time-modern-c-anymore-henrique-bucher-phd) too.
    Back in late 1990 we were also modern-at-the-time C++ hipsters, and we used latest features. We told everyone also they should use those features too. Over time we learned it's unnecesary to use some language features just because they are there, or features we used proved to be bad (like RTTI, exceptions, and streams), or it backfired by unnecessary code complexity. If you think this is nonsense, just wait few more years and [you'll hate Modern C++ too](https://www.linkedin.com/pulse/why-i-dont-spend-time-modern-c-anymore-henrique-bucher-phd).

    Why use Orthodox C++?
    ---------------------
  28. @bkaradzic bkaradzic revised this gist May 18, 2016. 1 changed file with 1 addition and 2 deletions.
    3 changes: 1 addition & 2 deletions orthodoxc++.md
    Original file line number Diff line number Diff line change
    @@ -9,7 +9,7 @@ Orthodox C++ (sometimes referred as **C+**) is minimal subset of C++ that improv
    Why not Modern C++?
    -------------------

    Back in late 1990 we were also modern-at-the-time C++ hipsters, and we used latest features. We told everyone also they should use those features too. Over time we learned it's unnecesary to use some language features just because they are there, or features we used proved to be bad (like RTTI, exceptions, and streams), or it backfired by unnecessary code complexity. If you think this is nonsense, just wait few more years and you'll hate Modern C++ too.
    Back in late 1990 we were also modern-at-the-time C++ hipsters, and we used latest features. We told everyone also they should use those features too. Over time we learned it's unnecesary to use some language features just because they are there, or features we used proved to be bad (like RTTI, exceptions, and streams), or it backfired by unnecessary code complexity. If you think this is nonsense, just wait few more years and [you'll hate Modern C++](https://www.linkedin.com/pulse/why-i-dont-spend-time-modern-c-anymore-henrique-bucher-phd) too.

    Why use Orthodox C++?
    ---------------------
    @@ -49,7 +49,6 @@ Any other similar ideas?

    - [Embedded C++](https://en.wikipedia.org/wiki/Embedded_C%2B%2B)
    - [Sane C++](http://flohofwoe.blogspot.com/2013/06/sane-c.html)
    - [Why I don't spend time with Modern C++ anymore](https://www.linkedin.com/pulse/why-i-dont-spend-time-modern-c-anymore-henrique-bucher-phd)

    Code examples
    -------------
  29. @bkaradzic bkaradzic revised this gist May 18, 2016. 1 changed file with 2 additions and 1 deletion.
    3 changes: 2 additions & 1 deletion orthodoxc++.md
    Original file line number Diff line number Diff line change
    @@ -49,6 +49,7 @@ Any other similar ideas?

    - [Embedded C++](https://en.wikipedia.org/wiki/Embedded_C%2B%2B)
    - [Sane C++](http://flohofwoe.blogspot.com/2013/06/sane-c.html)
    - [Why I don't spend time with Modern C++ anymore](https://www.linkedin.com/pulse/why-i-dont-spend-time-modern-c-anymore-henrique-bucher-phd)

    Code examples
    -------------
    @@ -57,4 +58,4 @@ Code examples
    - [DOOM 3 BFG](https://github.com/id-Software/DOOM-3-BFG)
    - [Qt](https://github.com/qtproject) (when built with no-rtti, no-exceptions)
    - [dear imgui](https://github.com/ocornut/imgui)
    - [bgfx](https://github.com/bkaradzic/bgfx)
    - [bgfx](https://github.com/bkaradzic/bgfx)
  30. @bkaradzic bkaradzic revised this gist Jan 18, 2016. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion orthodoxc++.md
    Original file line number Diff line number Diff line change
    @@ -55,6 +55,6 @@ Code examples

    - Any C source that compiles with C++ compiler.
    - [DOOM 3 BFG](https://github.com/id-Software/DOOM-3-BFG)
    - [Qt](https://github.com/qtproject) when built with no-rtti, no-exceptions.
    - [Qt](https://github.com/qtproject) (when built with no-rtti, no-exceptions)
    - [dear imgui](https://github.com/ocornut/imgui)
    - [bgfx](https://github.com/bkaradzic/bgfx)