Uploaded image for project: 'Core Server'
  1. Core Server
  2. SERVER-1371

BSONObjBuilder does not handle uint64_t correctly (overloaded append() are ambiguous)

    XMLWordPrintableJSON

Details

    • Icon: Bug Bug
    • Resolution: Won't Fix
    • Icon: Critical - P2 Critical - P2
    • None
    • None
    • Internal Client
    • None
    • Ubuntu Lucid 64bit, GCC 4.3.4/4.4.3
    • Major Change
    • Linux

    Description

      The following code does not compile due to ambiguous BSONObjBuilder::append() overload

      code:
      uint64_t orz = 10;
      BSONObj o = BSON("test" << orz);

      gcc compile error messages:

      /usr/include/mongo/client/../db/jsobj.h:1924: error: call of overloaded 'append(const char*&, long unsigned int&)' is ambiguous
      /usr/include/mongo/client/../db/jsobj.h:1208: note: candidates are: void mongo::BSONObjBuilder::append(const char*, mongo::BSONObj) <near match>
      /usr/include/mongo/client/../db/jsobj.h:1214: note: void mongo::BSONObjBuilder::append(const std::string&, mongo::BSONObj) <near match>
      /usr/include/mongo/client/../db/jsobj.h:1253: note: void mongo::BSONObjBuilder::append(const char*, bool)
      /usr/include/mongo/client/../db/jsobj.h:1260: note: void mongo::BSONObjBuilder::append(const char*, int)
      /usr/include/mongo/client/../db/jsobj.h:1266: note: void mongo::BSONObjBuilder::append(const std::string&, int)
      /usr/include/mongo/client/../db/jsobj.h:1271: note: void mongo::BSONObjBuilder::append(const char*, unsigned int)
      /usr/include/mongo/client/../db/jsobj.h:1274: note: void mongo::BSONObjBuilder::append(const char*, long long int)
      /usr/include/mongo/client/../db/jsobj.h:1281: note: void mongo::BSONObjBuilder::append(const std::string&, long long int)
      /usr/include/mongo/client/../db/jsobj.h:1322: note: mongo::BSONObjBuilder& mongo::BSONObjBuilder::append(const char*, double)
      /usr/include/mongo/client/../db/jsobj.h:1370: note: void mongo::BSONObjBuilder::append(const char*, mongo::Date_t)
      /usr/include/mongo/client/../db/jsobj.h:1398: note: mongo::BSONObjBuilder& mongo::BSONObjBuilder::append(const char*, const char*) <near match>
      /usr/include/mongo/client/../db/jsobj.h:1406: note: void mongo::BSONObjBuilder::append(const char*, std::string) <near match>

      Apparently the problem is that BSONObjBuilder::append() does not overload specifically for "unsigned long long" type so for uint64_t it's possible to match all types, leading to ambiguous overload.

      This bug is in all release, including the trunk version.

      Attachments

        Activity

          People

            eliot Eliot Horowitz (Inactive)
            nctusdk Mark Sung
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: