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.