52   using std::map<L, size_t>::operator=;
 
   61   void print(
const std::string& 
s = 
"Assignment: ",
 
   62              const std::function<std::string(
L)>& labelFormatter =
 
   64     std::cout << 
s << 
": ";
 
   65     for (
const typename Assignment::value_type& keyValue : *
this) {
 
   66       std::cout << 
"(" << labelFormatter(keyValue.first) << 
", " 
   67                 << keyValue.second << 
")";
 
   69     std::cout << std::endl;
 
   73     return (*
this == 
other);
 
   88   template <
typename AssignmentType = Assignment<L>>
 
   90       const std::vector<std::pair<L, size_t>>& 
keys) {
 
   91     std::vector<AssignmentType> allPossValues;
 
   92     AssignmentType assignment;
 
   93     for (
const auto& [idx, 
_] : 
keys) assignment[idx] = 0;  
 
   97       allPossValues.push_back(assignment);
 
  102         auto [idx, cardinality] = 
keys[
j];
 
  106         const bool carry = (assignment[idx] == cardinality);
 
  114     return allPossValues;