Supported solvers are available on seperated packages, please check the project webpage of the supported solvers list.
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.