• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1+++
2title = "Prerequisites"
3weight = 2
4+++
5
6Outcome is a header-only C++ 14 library known to work well on the latest
7point releases of these compiler-platform combinations or better:
8
9- clang 4.0.1 (LLVM) [FreeBSD, Linux, OS X]
10- GCC 6.5 [Linux]
11- Visual Studio 2017.9 [Windows]
12- XCode 9 [MacOS]
13
14For non-Windows non-POSIX platforms (typically embedded systems), Outcome
15is usable in its Outcome.Experimental form with the macro `BOOST_OUTCOME_SYSTEM_ERROR2_NOT_POSIX`
16defined.
17
18It is worth turning on C++ 17 or C++ 20 if you can, as there are many usability and
19performance improvements. Any Concepts TS or Coroutines TS implemented
20by your compiler is automatically detected and used.
21
22
23Partially working compilers (this was last updated January 2019):
24
25- clang 3.5 - 3.9 can compile varying degrees of the test suite, the
26problem is lack of complete and unbuggy C++ 14 language support.
27- Older point releases of GCCs 7 and 8 have internal compiler error bugs
28in their constexpr implementation which tend to be triggered by using
29Outcome in constexpr. If you don't use Outcome in constexpr, you won't
30see these problems. If you need your GCC to not ICE, upgrade to the
31very latest point release, the constexpr ICE has been since fixed.
32- Early editions of Visual Studio 2017 have many corner case problems.
33The latest point release, VS2017.9, only has a few known problems,
34and should be relatively unsurprising for most use cases.
35
36---
37
38"C++ 14" compilers which do not work, and will not work until their
39maintainers fix them:
40
41- GCC 5, due to a bug in nested template variables parsing which was fixed
42in GCC 6. I appreciate that this upsets a lot of users. Please raise your
43upset at https://gcc.gnu.org/bugzilla/. In the meantime, you can get fairly
44far in Outcome with even clang 3.5.
45- Any compiler which uses the libstdc++ version which comes with GCC 5, as it does
46not implement enough of the C++ 14 standard library for Outcome to compile.
47