Add Modern C++ support into build system
We need to be able to write and compile Modern C++ - at least C++14, but preferably C++17
Rationale
There has been almost 7 years since C++11 is an official standard (and even more since our compiler, gcc, supports it), yet the current Crown codebase is stuck with pre-Modern version of the language. C++14 fixes some important holes in C++11 and actually makes it usable for wide circle of developers. C++17 adds a few small but useful improvements into the language, is now supported by all major compilers.
@vshamray has spent last 3 years writing commercial software in Modern C++ and finds it rather harmful for his productivity as a developer to be forced to use a pre-Modern dialect. It basically means that 33% of Crown software developers work below their capacity. Due to that fact it is effectively a blocker for any Governance improvements. Obviously, it is something to address ASAP.
Current state
There are several problems to be solved:
-
std=c++17
flag needs to be added to compiler flags (trivial) - Boost needs to be updated to a newer version (at least 1.57, preferably 1.66) or
BOOST_NO_CXX11_SCOPED_ENUMS
define should be used. Given that we're changing the build system there's no reason not to update Boost anyway (easy) - Even if 1 and 2 are done MacOS build still doesn't compile, not even with C++11. The problem seems to be that with Modern C++ compiler flag Qt starts to depend on modern standard library features, but the standard library that is used to compile MacOS version doesn't have any of C++11 features (difficult, needs research)
Useful link
Bitcoin C++11 discussion and commits
https://github.com/bitcoin/bitcoin/issues/6211