Question

J'ai une variante récursive boost comme ci-dessous. Lorsque je compare deux objets variants récursifs à l'aide d'Assert, cela fonctionne bien mais avec attendre_eq, il donne une erreur de compilation.

typedef boost::make_recursive_variant<bool, boost::uint8_t, boost::uint32_t,
    boost::int32_t, double, std::string, boost::uuids::uuid>::type rvariant_type;

variant_type b1 = true;
rvariant_type b2 = true;

assert(b1 == b2);  //work fine

EXPECT_EQ(b1,b2); //gives compiler error.
EXPECT_EQ(boost::get<bool>(b1), boost::get<bool>(b2)); //works fine

boost / v1.46.1 / include / boost / variant / de détail / variant_io.hpp: 64: Erreur: pas de correspondance pour 'opérateur <<' dans '((const boost :: Detail :: variant :: imprimante >> *) ) -> boost :: Detail :: variant :: imprimante >> :: out_ << opérand '

Était-ce utile?

La solution

GTEST utilise fortement les flux de sortie, mais il semble que la prise en charge de la variante Boost :: pour l'impression via un opérateur surchargé << est très limitée, sinon inexistante.

Regarde ça:

#include <boost/variant.hpp>
#include <boost/cstdint.hpp>
#include <boost/uuid/uuid.hpp>
#include <iostream>
typedef boost::make_recursive_variant<bool, boost::uint8_t, boost::uint32_t,
    boost::int32_t, double, std::string, boost::uuids::uuid>::type rvariant_type;

int main() {
  rvariant_type v1 = true;
  std::cout << v1 << std::endl;
  return 0;
}

Ce programme très court donne la même erreur de compilation que vous avez obtenue de GTest.

Le compléter avec ceci:

std::ostream& operator<<(std::ostream& out, const rvariant_type& p) {
  return out << boost::get<bool>(p);
}

Fait ma compilation de test, je vais jeter un œil si je peux également faire fonctionner votre exemple.

METTRE À JOUR: J'ai juste compilé et réussi un test en fonction de votre code après avoir mis l'opérateur susmentionné <<, donc l'absence d'un opérateur << est précisément ce qui le provoquait.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top