)]}'
{
  "commit": "0804ca88abbfc5951be1e3f2ccb4fe7d46c3a410",
  "tree": "f170e6bc270d77fde503cb823ed5b09f5dd8cb71",
  "parents": [
    "a6ca7036a1147f5930714ff02ee3951755ab712d"
  ],
  "author": {
    "name": "cor3ntin",
    "email": "corentinjabot@gmail.com",
    "time": "Sat May 24 10:36:18 2025 +0200"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Sat May 24 10:36:18 2025 +0200"
  },
  "message": "[Clang] Explain why a type trait evaluated to false. (#141238)\n\n`static_assert(std::is_xx_v\u003cMyType\u003e);` is a common pattern to check that\na type meets a requirement.\n\nThis patch produces diagnostics notes when such assertion fails. The\nfirst type trait for which we provide detailed explanation is\nstd::is_trivially_relocatable.\n\nWe employ the same mechanisn when a type trait appears an an unsatisfied\natomic constraint.\n\nI plan to also support `std::is_trivially_replaceable` in a follow up\nPR, and hopefully, over time we can support more type traits.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "2835e3a9d99607fff564560f4ee856db6ec23a5e",
      "old_mode": 33188,
      "old_path": "clang/include/clang/Basic/DiagnosticSemaKinds.td",
      "new_id": "f2fcfe5d351f43501f1ccbff51908f6170f532a0",
      "new_mode": 33188,
      "new_path": "clang/include/clang/Basic/DiagnosticSemaKinds.td"
    },
    {
      "type": "modify",
      "old_id": "1091a7f504b57d50b7853354f671bfbdff78182c",
      "old_mode": 33188,
      "old_path": "clang/include/clang/Sema/Sema.h",
      "new_id": "bbc5c181c6a10727dde888251505374c0fc22f06",
      "new_mode": 33188,
      "new_path": "clang/include/clang/Sema/Sema.h"
    },
    {
      "type": "modify",
      "old_id": "7da8e696c90bd6758f1bc77042734b4d1988b1cf",
      "old_mode": 33188,
      "old_path": "clang/lib/Sema/SemaConcept.cpp",
      "new_id": "c6a54dc141ded1ecef82dced120e0803ecd2c6b7",
      "new_mode": 33188,
      "new_path": "clang/lib/Sema/SemaConcept.cpp"
    },
    {
      "type": "modify",
      "old_id": "ead53a995dff1b8355ffa6ad04f56d39eab34e03",
      "old_mode": 33188,
      "old_path": "clang/lib/Sema/SemaDeclCXX.cpp",
      "new_id": "770ac9839eb98b65c23d9c385bd6d64e102ea6d0",
      "new_mode": 33188,
      "new_path": "clang/lib/Sema/SemaDeclCXX.cpp"
    },
    {
      "type": "modify",
      "old_id": "bac71c07d9907fcffd99ed823620e4a20f601232",
      "old_mode": 33188,
      "old_path": "clang/lib/Sema/SemaTypeTraits.cpp",
      "new_id": "71d1d44e93a84e7a388ba98d9b5a48db23370a7c",
      "new_mode": 33188,
      "new_path": "clang/lib/Sema/SemaTypeTraits.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "90cff1e66000c50b499615df6ccbb7f5df3db034",
      "new_mode": 33188,
      "new_path": "clang/test/SemaCXX/type-traits-unsatisfied-diags-std.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d9cab20f4febd28a2c9029ec7f20073aa02e1a1d",
      "new_mode": 33188,
      "new_path": "clang/test/SemaCXX/type-traits-unsatisfied-diags.cpp"
    },
    {
      "type": "modify",
      "old_id": "e8f3e637ac2726b3b202f6864804b2c2bdad1ddb",
      "old_mode": 33188,
      "old_path": "clang/test/SemaObjCXX/objc-weak-type-traits.mm",
      "new_id": "91683c904d35d130dbdd1e85ab6ec96a885c4e05",
      "new_mode": 33188,
      "new_path": "clang/test/SemaObjCXX/objc-weak-type-traits.mm"
    }
  ]
}
