Frequently Asked Questions (FAQ)

What solvers are currently available?

Supported solvers are:

Solvers we plan to support in the future:

What are those Optional and Variant types?

An optional type is a templated class which modelize the possibility in C++ to have "no value" in a variable. It is safer than passing a null pointer as an exception will be launched if you try to dereference a variable which has no content.

See the following example:

// Declare an empty optional int.
boost::optional<int> optInt;
// There is nothing in our optional int.
// Check if this is really the case.
if (optInt)
assert (false);
// Set a value in our optional int.
optInt = 42;
// Access our optional int.
std::cout << *optInt << std::endl;

A variant is an object-oriented way to define a C enum. Here is a small example:

// x can be a string or an int.
boost::variant<int, std::string> x;
// Set x to 42.
x = 42;
// Which allows to determine what is the current type of x
// First type (int) is zero, second (string) is one, etc.
assert (x.which () == 0);
// Set x to "hello world".
x = "hello world";
// Test again.
assert (x.which () == 1);

Please note that a variant can never be empty.

See the Boost.Optional and Boost.Variant documentation for more information.