And removing the bundled std::optional implementation. This finally
makes this library compatible with C++17. Since this would be a huge
backwards-incompatible change that would make everyone angry, the
following had to be done in case both CORRADE_BUILD_DEPRECATED and
MAGNUM_BUILD_DEPRECATED is defined:
* Under C++11 and C++14, Containers::Optional / Containers::NullOpt is
aliased to std::optional / std::nullopt. This is no worse than the
state before, when we also provided these symbols.
* Under C++17, where standard <optional> header is available,
Containers::Optional provides implicit conversion to it. Only one-way
conversion is supported, as there was fortunately no Magnum API that
took std::optional via parameter, and there might be some corner
cases that this doesn't cover. The goal is to have all examples
compiling with the old API, at least.
* There's a new test especially for this, which checks that both the
C++11 and C++17 ways of doing things work as they should.
The typedef and conversion is marked as deprecated, so it will spit out
many warnings to push users to upgrade. I hope I can completely remove
this mess soon :/
In order to have a seamless transition for all the plugins and potential
user code the original constructor was marked as deprecated and there is
a new constructor taking also the colors.
The string stream solution that was used in case of NaCl and Android
wasn't working at all, thus I discarded it in favor of less overhead-y C
functions. While strtoul() and others *are* defined in the std::
namespace, strtof() isn't. What a pile of crap. I also had to emulate
C++ exception behavior in order to match the std::stoul() and
std::stof() behavior.
This plugin needs a zero-copy rewrite anyway, but at least the test is
green now on all platforms.
I discarded the NaCl version because currently there's no toolchain for
it and I'm not going to guess whether stof() and friends are even there.
If they are, then it's just a matter of enabling the Android code path
also for NaCl.
`char*` is now the default type for byte arrays. Results in shorter
code, less annoyances and more convenient testing. As is the case with
Corrade, I'm not doing any compatibility/deprecation layer, as most of
these functions is not widely used anyway.