)]}'
{
  "commit": "f02ac2fb573bed72e9a2d1875807c6ff7ac19ec8",
  "tree": "38d928d572d45117e00779c59d199da9e728e3ad",
  "parents": [
    "b53fa8e14b352431036a1902d6cebbc06de97244"
  ],
  "author": {
    "name": "Lukas Barth",
    "email": "mail@tinloaf.de",
    "time": "Wed Feb 08 09:33:03 2023 +0100"
  },
  "committer": {
    "name": "Jens Geyer",
    "email": "Jens-G@users.noreply.github.com",
    "time": "Fri Mar 08 18:31:11 2024 +0100"
  },
  "message": "Move default constructor and operator\u003d\u003d implementation to CPP file\n\nBoth the default constructor and operator\u003d\u003d implementations reference\ncertain member functions of the class\u0027 members. As an example, the default\nconstructor references (i.e., \"uses\") the default constructors of its\nmembers.\n\nIf a class contains a std::vector\u003cFoo\u003e, and Foo has only been *forward*-\ndeclared (which happens often in Thrift-generated code), this creates\nundefined behavior: The std::vector specification states that as long as\nFoo is an incomplete type, it is fine to reference std::vector\u003cFoo\u003e, but\nnot any members (such as its default constructor).\n\nThus, we must defer our default constructor\u0027s implementation (which references\nthe default constructor of std::vector\u003cFoo\u003e) to a point where Foo is a\ncomplete type. That is the case in the .cpp file.\n\nThe same holds for operator\u003d\u003d.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "9724fae80a67d2e93ac3021ce6bd5a23924a31ce",
      "old_mode": 33188,
      "old_path": "compiler/cpp/src/thrift/generate/t_cpp_generator.cc",
      "new_id": "fecfa4bb564fc4618abee8d3f2ea386173acf1ed",
      "new_mode": 33188,
      "new_path": "compiler/cpp/src/thrift/generate/t_cpp_generator.cc"
    }
  ]
}
