["TranslationUnitDecl" , [
  {
    "pointer" : 1,
    "source_range" : [
      {
      },
      {
      }
    ]
  },
  [
    ["TypedefDecl" , [
      {
        "pointer" : 2,
        "source_range" : [
          {
          },
          {
          }
        ],
        "is_implicit" : true
      },
      {
        "name" : "__int128_t",
        "qual_name" : [
          "__int128_t"
        ]
      },
      0,
      {
      }
    ]],
    ["TypedefDecl" , [
      {
        "pointer" : 3,
        "source_range" : [
          {
          },
          {
          }
        ],
        "is_implicit" : true
      },
      {
        "name" : "__uint128_t",
        "qual_name" : [
          "__uint128_t"
        ]
      },
      0,
      {
      }
    ]],
    ["TypedefDecl" , [
      {
        "pointer" : 4,
        "source_range" : [
          {
          },
          {
          }
        ],
        "is_implicit" : true
      },
      {
        "name" : "__NSConstantString",
        "qual_name" : [
          "__NSConstantString"
        ]
      },
      0,
      {
      }
    ]],
    ["TypedefDecl" , [
      {
        "pointer" : 5,
        "source_range" : [
          {
          },
          {
          }
        ],
        "is_implicit" : true
      },
      {
        "name" : "__builtin_ms_va_list",
        "qual_name" : [
          "__builtin_ms_va_list"
        ]
      },
      0,
      {
      }
    ]],
    ["TypedefDecl" , [
      {
        "pointer" : 6,
        "source_range" : [
          {
          },
          {
          }
        ],
        "is_implicit" : true
      },
      {
        "name" : "__builtin_va_list",
        "qual_name" : [
          "__builtin_va_list"
        ]
      },
      0,
      {
      }
    ]],
    ["NamespaceDecl" , [
      {
        "pointer" : 7,
        "source_range" : [
          {
            "file" : "tests/class_template.cpp",
            "line" : 7,
            "column" : 1
          },
          {
            "line" : 27,
            "column" : 1
          }
        ]
      },
      {
        "name" : "N",
        "qual_name" : [
          "N"
        ]
      },
      [
        ["ClassTemplateDecl" , [
          {
            "pointer" : 8,
            "source_range" : [
              {
                "line" : 8,
                "column" : 1
              },
              {
                "line" : 11,
                "column" : 1
              }
            ]
          },
          {
            "name" : "S",
            "qual_name" : [
              "S",
              "N"
            ]
          },
          {
            "specializations" : [
              ["ClassTemplateSpecializationDecl" , [
                {
                  "pointer" : 9,
                  "parent_pointer" : 7,
                  "source_range" : [
                    {
                      "line" : 13,
                      "column" : 1
                    },
                    {
                      "line" : 16,
                      "column" : 1
                    }
                  ]
                },
                {
                  "name" : "S",
                  "qual_name" : [
                    "S<N::S<int> *>",
                    "N"
                  ]
                },
                10,
                [
                  ["CXXRecordDecl" , [
                    {
                      "pointer" : 11,
                      "parent_pointer" : 9,
                      "source_range" : [
                        {
                          "line" : 14,
                          "column" : 1
                        },
                        {
                          "column" : 8
                        }
                      ],
                      "is_implicit" : true,
                      "access" : "Public"
                    },
                    {
                      "name" : "S",
                      "qual_name" : [
                        "S",
                        "S<N::S<int> *>",
                        "N"
                      ]
                    },
                    10,
                    [
                    ],
                    {
                    },
                    "TTK_Struct",
                    {
                      "definition_ptr" : 9
                    },
                    {
                    }
                  ]],
                  ["FieldDecl" , [
                    {
                      "pointer" : 12,
                      "parent_pointer" : 9,
                      "source_range" : [
                        {
                          "line" : 15,
                          "column" : 3
                        },
                        {
                          "column" : 5
                        }
                      ],
                      "is_this_declaration_referenced" : true,
                      "access" : "Public"
                    },
                    {
                      "name" : "field",
                      "qual_name" : [
                        "field",
                        "S<N::S<int> *>",
                        "N"
                      ]
                    },
                    {
                      "type_ptr" : 13
                    },
                    {
                    }
                  ]],
                  ["CXXConstructorDecl" , [
                    {
                      "pointer" : 14,
                      "parent_pointer" : 9,
                      "source_range" : [
                        {
                          "line" : 14,
                          "column" : 8
                        },
                        {
                          "column" : 8
                        }
                      ],
                      "is_implicit" : true,
                      "is_used" : true,
                      "is_this_declaration_referenced" : true,
                      "access" : "Public"
                    },
                    {
                      "name" : "S",
                      "qual_name" : [
                        "S",
                        "S<N::S<int> *>",
                        "N"
                      ]
                    },
                    {
                      "type_ptr" : 15
                    },
                    {
                      "mangled_name" : "7066629788491464130",
                      "is_cpp" : true,
                      "is_inline" : true,
                      "decl_ptr_with_body" : 14,
                      "body" : ["CompoundStmt" , [
                        {
                          "pointer" : 16,
                          "source_range" : [
                            {
                              "column" : 8
                            },
                            {
                              "column" : 8
                            }
                          ]
                        },
                        [
                        ]
                      ]]
                    },
                    {
                      "cxx_ctor_initializers" : [
                        {
                          "subject" : ["Member" , {
                            "kind" : "Field",
                            "decl_pointer" : 12,
                            "name" : {
                              "name" : "field",
                              "qual_name" : [
                                "field",
                                "S<N::S<int> *>",
                                "N"
                              ]
                            },
                            "qual_type" : {
                              "type_ptr" : 13
                            }
                          }],
                          "source_range" : [
                            {
                              "column" : 8
                            },
                            {
                              "column" : 8
                            }
                          ],
                          "init_expr" : ["CXXConstructExpr" , [
                            {
                              "pointer" : 17,
                              "source_range" : [
                                {
                                  "column" : 8
                                },
                                {
                                  "column" : 8
                                }
                              ]
                            },
                            [
                            ],
                            {
                              "qual_type" : {
                                "type_ptr" : 13
                              }
                            },
                            {
                              "decl_ref" : {
                                "kind" : "CXXConstructor",
                                "decl_pointer" : 18,
                                "name" : {
                                  "name" : "S",
                                  "qual_name" : [
                                    "S",
                                    "S<int>",
                                    "N"
                                  ]
                                },
                                "qual_type" : {
                                  "type_ptr" : 15
                                }
                              }
                            }
                          ]]
                        }
                      ]
                    }
                  ]],
                  ["CXXConstructorDecl" , [
                    {
                      "pointer" : 19,
                      "parent_pointer" : 9,
                      "source_range" : [
                        {
                          "column" : 8
                        },
                        {
                          "column" : 8
                        }
                      ],
                      "is_implicit" : true,
                      "access" : "Public"
                    },
                    {
                      "name" : "S",
                      "qual_name" : [
                        "S",
                        "S<N::S<int> *>",
                        "N"
                      ]
                    },
                    {
                      "type_ptr" : 20
                    },
                    {
                      "mangled_name" : "11949468677960817094",
                      "is_cpp" : true,
                      "is_inline" : true,
                      "parameters" : [
                        ["ParmVarDecl" , [
                          {
                            "pointer" : 21,
                            "source_range" : [
                              {
                                "column" : 8
                              },
                              {
                                "column" : 8
                              }
                            ]
                          },
                          {
                            "name" : "",
                            "qual_name" : [
                              ""
                            ]
                          },
                          {
                            "type_ptr" : 22
                          },
                          {
                            "parm_index_in_function" : 0
                          }
                        ]]
                      ]
                    },
                    {
                      "is_constexpr" : true
                    }
                  ]],
                  ["CXXConstructorDecl" , [
                    {
                      "pointer" : 23,
                      "parent_pointer" : 9,
                      "source_range" : [
                        {
                          "column" : 8
                        },
                        {
                          "column" : 8
                        }
                      ],
                      "is_implicit" : true,
                      "access" : "Public"
                    },
                    {
                      "name" : "S",
                      "qual_name" : [
                        "S",
                        "S<N::S<int> *>",
                        "N"
                      ]
                    },
                    {
                      "type_ptr" : 24
                    },
                    {
                      "mangled_name" : "14813278630171558444",
                      "is_cpp" : true,
                      "is_inline" : true,
                      "parameters" : [
                        ["ParmVarDecl" , [
                          {
                            "pointer" : 25,
                            "source_range" : [
                              {
                                "column" : 8
                              },
                              {
                                "column" : 8
                              }
                            ]
                          },
                          {
                            "name" : "",
                            "qual_name" : [
                              ""
                            ]
                          },
                          {
                            "type_ptr" : 26
                          },
                          {
                            "parm_index_in_function" : 0
                          }
                        ]]
                      ]
                    },
                    {
                      "is_constexpr" : true
                    }
                  ]]
                ],
                {
                },
                "TTK_Struct",
                {
                  "definition_ptr" : 9,
                  "is_complete_definition" : true
                },
                {
                  "is_pod" : true
                },
                "15160212752071097404",
                {
                  "template_decl" : 8,
                  "specialization_args" : [
                    ["Type" , {
                      "type_ptr" : 27
                    }]
                  ]
                }
              ]]
            ]
          }
        ]],
        ["ClassTemplatePartialSpecializationDecl" , [
          {
            "pointer" : 28,
            "parent_pointer" : 7,
            "source_range" : [
              {
                "line" : 13,
                "column" : 1
              },
              {
                "line" : 16,
                "column" : 1
              }
            ]
          },
          {
            "name" : "S",
            "qual_name" : [
              "S<type-parameter-0-0 *>",
              "N"
            ]
          },
          29,
          [
            ["CXXRecordDecl" , [
              {
                "pointer" : 30,
                "parent_pointer" : 28,
                "source_range" : [
                  {
                    "line" : 14,
                    "column" : 1
                  },
                  {
                    "column" : 8
                  }
                ],
                "is_implicit" : true,
                "access" : "Public"
              },
              {
                "name" : "S",
                "qual_name" : [
                  "S",
                  "S<type-parameter-0-0 *>",
                  "N"
                ]
              },
              29,
              [
              ],
              {
              },
              "TTK_Struct",
              {
                "definition_ptr" : 0,
                "is_dependent_type" : true
              },
              {
              }
            ]],
            ["FieldDecl" , [
              {
                "pointer" : 31,
                "parent_pointer" : 28,
                "source_range" : [
                  {
                    "line" : 15,
                    "column" : 3
                  },
                  {
                    "column" : 5
                  }
                ],
                "access" : "Public"
              },
              {
                "name" : "field",
                "qual_name" : [
                  "field",
                  "S<type-parameter-0-0 *>",
                  "N"
                ]
              },
              {
                "type_ptr" : 32
              },
              {
              }
            ]]
          ],
          {
          },
          "TTK_Struct",
          {
            "definition_ptr" : 28,
            "is_complete_definition" : true,
            "is_dependent_type" : true
          },
          {
          },
          "15216485236755079891",
          {
            "template_decl" : 8,
            "specialization_args" : [
              ["Type" , {
                "type_ptr" : 33
              }]
            ]
          }
        ]],
        ["ClassTemplateSpecializationDecl" , [
          {
            "pointer" : 34,
            "parent_pointer" : 7,
            "source_range" : [
              {
                "line" : 18,
                "column" : 1
              },
              {
                "line" : 21,
                "column" : 1
              }
            ]
          },
          {
            "name" : "S",
            "qual_name" : [
              "S<int>",
              "N"
            ]
          },
          35,
          [
            ["CXXRecordDecl" , [
              {
                "pointer" : 36,
                "parent_pointer" : 34,
                "source_range" : [
                  {
                    "line" : 19,
                    "column" : 1
                  },
                  {
                    "column" : 8
                  }
                ],
                "is_implicit" : true,
                "access" : "Public"
              },
              {
                "name" : "S",
                "qual_name" : [
                  "S",
                  "S<int>",
                  "N"
                ]
              },
              35,
              [
              ],
              {
              },
              "TTK_Struct",
              {
                "definition_ptr" : 0
              },
              {
              }
            ]],
            ["FieldDecl" , [
              {
                "pointer" : 37,
                "parent_pointer" : 34,
                "source_range" : [
                  {
                    "line" : 20,
                    "column" : 3
                  },
                  {
                    "column" : 7
                  }
                ],
                "is_this_declaration_referenced" : true,
                "access" : "Public"
              },
              {
                "name" : "field",
                "qual_name" : [
                  "field",
                  "S<int>",
                  "N"
                ]
              },
              {
                "type_ptr" : 38
              },
              {
              }
            ]],
            ["CXXConstructorDecl" , [
              {
                "pointer" : 18,
                "parent_pointer" : 34,
                "source_range" : [
                  {
                    "line" : 19,
                    "column" : 8
                  },
                  {
                    "column" : 8
                  }
                ],
                "is_implicit" : true,
                "is_used" : true,
                "is_this_declaration_referenced" : true,
                "access" : "Public"
              },
              {
                "name" : "S",
                "qual_name" : [
                  "S",
                  "S<int>",
                  "N"
                ]
              },
              {
                "type_ptr" : 15
              },
              {
                "mangled_name" : "13141222913637319333",
                "is_cpp" : true,
                "is_inline" : true,
                "decl_ptr_with_body" : 18,
                "body" : ["CompoundStmt" , [
                  {
                    "pointer" : 39,
                    "source_range" : [
                      {
                        "column" : 8
                      },
                      {
                        "column" : 8
                      }
                    ]
                  },
                  [
                  ]
                ]]
              },
              {
              }
            ]],
            ["CXXDestructorDecl" , [
              {
                "pointer" : 40,
                "parent_pointer" : 34,
                "source_range" : [
                  {
                    "column" : 8
                  },
                  {
                    "column" : 8
                  }
                ],
                "is_implicit" : true,
                "access" : "Public"
              },
              {
                "name" : "~S",
                "qual_name" : [
                  "~S",
                  "S<int>",
                  "N"
                ]
              },
              {
                "type_ptr" : 41
              },
              {
                "mangled_name" : "16063732695960137765",
                "is_cpp" : true,
                "is_inline" : true
              },
              {
              }
            ]],
            ["CXXConstructorDecl" , [
              {
                "pointer" : 42,
                "parent_pointer" : 34,
                "source_range" : [
                  {
                    "column" : 8
                  },
                  {
                    "column" : 8
                  }
                ],
                "is_implicit" : true,
                "access" : "Public"
              },
              {
                "name" : "S",
                "qual_name" : [
                  "S",
                  "S<int>",
                  "N"
                ]
              },
              {
                "type_ptr" : 43
              },
              {
                "mangled_name" : "16241844907223898831",
                "is_cpp" : true,
                "is_inline" : true,
                "parameters" : [
                  ["ParmVarDecl" , [
                    {
                      "pointer" : 44,
                      "source_range" : [
                        {
                          "column" : 8
                        },
                        {
                          "column" : 8
                        }
                      ]
                    },
                    {
                      "name" : "",
                      "qual_name" : [
                        ""
                      ]
                    },
                    {
                      "type_ptr" : 45
                    },
                    {
                      "parm_index_in_function" : 0
                    }
                  ]]
                ]
              },
              {
                "is_constexpr" : true
              }
            ]],
            ["CXXConstructorDecl" , [
              {
                "pointer" : 46,
                "parent_pointer" : 34,
                "source_range" : [
                  {
                    "column" : 8
                  },
                  {
                    "column" : 8
                  }
                ],
                "is_implicit" : true,
                "access" : "Public"
              },
              {
                "name" : "S",
                "qual_name" : [
                  "S",
                  "S<int>",
                  "N"
                ]
              },
              {
                "type_ptr" : 47
              },
              {
                "mangled_name" : "6117498947183732003",
                "is_cpp" : true,
                "is_inline" : true,
                "parameters" : [
                  ["ParmVarDecl" , [
                    {
                      "pointer" : 48,
                      "source_range" : [
                        {
                          "column" : 8
                        },
                        {
                          "column" : 8
                        }
                      ]
                    },
                    {
                      "name" : "",
                      "qual_name" : [
                        ""
                      ]
                    },
                    {
                      "type_ptr" : 49
                    },
                    {
                      "parm_index_in_function" : 0
                    }
                  ]]
                ]
              },
              {
                "is_constexpr" : true
              }
            ]],
            ["CXXMethodDecl" , [
              {
                "pointer" : 50,
                "parent_pointer" : 34,
                "source_range" : [
                  {
                    "column" : 8
                  },
                  {
                    "column" : 8
                  }
                ],
                "is_implicit" : true,
                "is_used" : true,
                "is_this_declaration_referenced" : true,
                "access" : "Public"
              },
              {
                "name" : "operator=",
                "qual_name" : [
                  "operator=",
                  "S<int>",
                  "N"
                ]
              },
              {
                "type_ptr" : 51
              },
              {
                "mangled_name" : "16979568942442152295",
                "is_cpp" : true,
                "is_inline" : true,
                "parameters" : [
                  ["ParmVarDecl" , [
                    {
                      "pointer" : 52,
                      "source_range" : [
                        {
                          "column" : 8
                        },
                        {
                          "column" : 8
                        }
                      ],
                      "is_used" : true,
                      "is_this_declaration_referenced" : true
                    },
                    {
                      "name" : "",
                      "qual_name" : [
                        ""
                      ]
                    },
                    {
                      "type_ptr" : 45
                    },
                    {
                      "parm_index_in_function" : 0
                    }
                  ]]
                ],
                "decl_ptr_with_body" : 50,
                "body" : ["CompoundStmt" , [
                  {
                    "pointer" : 53,
                    "source_range" : [
                      {
                        "column" : 8
                      },
                      {
                        "column" : 8
                      }
                    ]
                  },
                  [
                    ["BinaryOperator" , [
                      {
                        "pointer" : 54,
                        "source_range" : [
                          {
                            "column" : 8
                          },
                          {
                            "column" : 8
                          }
                        ]
                      },
                      [
                        ["MemberExpr" , [
                          {
                            "pointer" : 55,
                            "source_range" : [
                              {
                                "column" : 8
                              },
                              {
                                "column" : 8
                              }
                            ]
                          },
                          [
                            ["CXXThisExpr" , [
                              {
                                "pointer" : 56,
                                "source_range" : [
                                  {
                                    "column" : 8
                                  },
                                  {
                                    "column" : 8
                                  }
                                ]
                              },
                              [
                              ],
                              {
                                "qual_type" : {
                                  "type_ptr" : 27
                                }
                              }
                            ]]
                          ],
                          {
                            "qual_type" : {
                              "type_ptr" : 38
                            },
                            "value_kind" : "LValue"
                          },
                          {
                            "is_arrow" : true,
                            "performs_virtual_dispatch" : true,
                            "name" : {
                              "name" : "field",
                              "qual_name" : [
                                "field",
                                "S<int>",
                                "N"
                              ]
                            },
                            "decl_ref" : {
                              "kind" : "Field",
                              "decl_pointer" : 37,
                              "name" : {
                                "name" : "field",
                                "qual_name" : [
                                  "field",
                                  "S<int>",
                                  "N"
                                ]
                              },
                              "qual_type" : {
                                "type_ptr" : 38
                              }
                            }
                          }
                        ]],
                        ["ImplicitCastExpr" , [
                          {
                            "pointer" : 57,
                            "source_range" : [
                              {
                                "column" : 8
                              },
                              {
                                "column" : 8
                              }
                            ]
                          },
                          [
                            ["MemberExpr" , [
                              {
                                "pointer" : 58,
                                "source_range" : [
                                  {
                                    "column" : 8
                                  },
                                  {
                                    "column" : 8
                                  }
                                ]
                              },
                              [
                                ["DeclRefExpr" , [
                                  {
                                    "pointer" : 59,
                                    "source_range" : [
                                      {
                                        "column" : 8
                                      },
                                      {
                                        "column" : 8
                                      }
                                    ]
                                  },
                                  [
                                  ],
                                  {
                                    "qual_type" : {
                                      "type_ptr" : 35,
                                      "is_const" : true
                                    },
                                    "value_kind" : "LValue"
                                  },
                                  {
                                    "decl_ref" : {
                                      "kind" : "ParmVar",
                                      "decl_pointer" : 52,
                                      "name" : {
                                        "name" : "",
                                        "qual_name" : [
                                          ""
                                        ]
                                      },
                                      "qual_type" : {
                                        "type_ptr" : 45
                                      }
                                    }
                                  }
                                ]]
                              ],
                              {
                                "qual_type" : {
                                  "type_ptr" : 38,
                                  "is_const" : true
                                },
                                "value_kind" : "LValue"
                              },
                              {
                                "performs_virtual_dispatch" : true,
                                "name" : {
                                  "name" : "field",
                                  "qual_name" : [
                                    "field",
                                    "S<int>",
                                    "N"
                                  ]
                                },
                                "decl_ref" : {
                                  "kind" : "Field",
                                  "decl_pointer" : 37,
                                  "name" : {
                                    "name" : "field",
                                    "qual_name" : [
                                      "field",
                                      "S<int>",
                                      "N"
                                    ]
                                  },
                                  "qual_type" : {
                                    "type_ptr" : 38
                                  }
                                }
                              }
                            ]]
                          ],
                          {
                            "qual_type" : {
                              "type_ptr" : 38
                            }
                          },
                          {
                            "cast_kind" : "LValueToRValue",
                            "base_path" : [
                            ]
                          }
                        ]]
                      ],
                      {
                        "qual_type" : {
                          "type_ptr" : 38
                        },
                        "value_kind" : "LValue"
                      },
                      {
                        "kind" : "Assign"
                      }
                    ]],
                    ["ReturnStmt" , [
                      {
                        "pointer" : 60,
                        "source_range" : [
                          {
                            "column" : 8
                          },
                          {
                            "column" : 8
                          }
                        ]
                      },
                      [
                        ["UnaryOperator" , [
                          {
                            "pointer" : 61,
                            "source_range" : [
                              {
                                "column" : 8
                              },
                              {
                                "column" : 8
                              }
                            ]
                          },
                          [
                            ["CXXThisExpr" , [
                              {
                                "pointer" : 62,
                                "source_range" : [
                                  {
                                    "column" : 8
                                  },
                                  {
                                    "column" : 8
                                  }
                                ]
                              },
                              [
                              ],
                              {
                                "qual_type" : {
                                  "type_ptr" : 27
                                }
                              }
                            ]]
                          ],
                          {
                            "qual_type" : {
                              "type_ptr" : 35
                            },
                            "value_kind" : "LValue"
                          },
                          {
                            "kind" : "Deref"
                          }
                        ]]
                      ]
                    ]]
                  ]
                ]]
              },
              {
                "is_constexpr" : true
              }
            ]],
            ["CXXMethodDecl" , [
              {
                "pointer" : 63,
                "parent_pointer" : 34,
                "source_range" : [
                  {
                    "column" : 8
                  },
                  {
                    "column" : 8
                  }
                ],
                "is_implicit" : true,
                "access" : "Public"
              },
              {
                "name" : "operator=",
                "qual_name" : [
                  "operator=",
                  "S<int>",
                  "N"
                ]
              },
              {
                "type_ptr" : 64
              },
              {
                "mangled_name" : "12620087123913755403",
                "is_cpp" : true,
                "is_inline" : true,
                "parameters" : [
                  ["ParmVarDecl" , [
                    {
                      "pointer" : 65,
                      "source_range" : [
                        {
                          "column" : 8
                        },
                        {
                          "column" : 8
                        }
                      ]
                    },
                    {
                      "name" : "",
                      "qual_name" : [
                        ""
                      ]
                    },
                    {
                      "type_ptr" : 49
                    },
                    {
                      "parm_index_in_function" : 0
                    }
                  ]]
                ]
              },
              {
                "is_constexpr" : true
              }
            ]]
          ],
          {
          },
          "TTK_Struct",
          {
            "definition_ptr" : 34,
            "is_complete_definition" : true
          },
          {
            "is_pod" : true,
            "destructor" : {
              "kind" : "CXXDestructor",
              "decl_pointer" : 40,
              "name" : {
                "name" : "~S",
                "qual_name" : [
                  "~S",
                  "S<int>",
                  "N"
                ]
              },
              "qual_type" : {
                "type_ptr" : 41
              }
            }
          },
          "9300085993929073917",
          {
            "template_decl" : 8,
            "specialization_args" : [
              ["Type" , {
                "type_ptr" : 38
              }]
            ]
          }
        ]],
        ["FunctionDecl" , [
          {
            "pointer" : 66,
            "source_range" : [
              {
                "line" : 23,
                "column" : 1
              },
              {
                "line" : 26,
                "column" : 1
              }
            ]
          },
          {
            "name" : "test",
            "qual_name" : [
              "test",
              "N"
            ]
          },
          {
            "type_ptr" : 67
          },
          {
            "mangled_name" : "3452486497056904182",
            "is_cpp" : true,
            "parameters" : [
              ["ParmVarDecl" , [
                {
                  "pointer" : 68,
                  "source_range" : [
                    {
                      "line" : 23,
                      "column" : 11
                    },
                    {
                      "column" : 18
                    }
                  ],
                  "is_used" : true,
                  "is_this_declaration_referenced" : true
                },
                {
                  "name" : "p",
                  "qual_name" : [
                    "p"
                  ]
                },
                {
                  "type_ptr" : 69
                },
                {
                  "parm_index_in_function" : 0
                }
              ]]
            ],
            "decl_ptr_with_body" : 66,
            "body" : ["CompoundStmt" , [
              {
                "pointer" : 70,
                "source_range" : [
                  {
                    "column" : 21
                  },
                  {
                    "line" : 26,
                    "column" : 1
                  }
                ]
              },
              [
                ["DeclStmt" , [
                  {
                    "pointer" : 71,
                    "source_range" : [
                      {
                        "line" : 24,
                        "column" : 3
                      },
                      {
                        "column" : 18
                      }
                    ]
                  },
                  [
                    ["CXXConstructExpr" , [
                      {
                        "pointer" : 72,
                        "source_range" : [
                          {
                            "column" : 15
                          },
                          {
                            "column" : 15
                          }
                        ]
                      },
                      [
                      ],
                      {
                        "qual_type" : {
                          "type_ptr" : 73
                        }
                      },
                      {
                        "decl_ref" : {
                          "kind" : "CXXConstructor",
                          "decl_pointer" : 14,
                          "name" : {
                            "name" : "S",
                            "qual_name" : [
                              "S",
                              "S<N::S<int> *>",
                              "N"
                            ]
                          },
                          "qual_type" : {
                            "type_ptr" : 15
                          }
                        }
                      }
                    ]]
                  ],
                  [
                    ["VarDecl" , [
                      {
                        "pointer" : 74,
                        "source_range" : [
                          {
                            "column" : 3
                          },
                          {
                            "column" : 15
                          }
                        ],
                        "is_used" : true,
                        "is_this_declaration_referenced" : true
                      },
                      {
                        "name" : "val",
                        "qual_name" : [
                          "val"
                        ]
                      },
                      {
                        "type_ptr" : 73
                      },
                      {
                        "init_expr" : ["CXXConstructExpr" , [
                          {
                            "pointer" : 72,
                            "source_range" : [
                              {
                                "column" : 15
                              },
                              {
                                "column" : 15
                              }
                            ]
                          },
                          [
                          ],
                          {
                            "qual_type" : {
                              "type_ptr" : 73
                            }
                          },
                          {
                            "decl_ref" : {
                              "kind" : "CXXConstructor",
                              "decl_pointer" : 14,
                              "name" : {
                                "name" : "S",
                                "qual_name" : [
                                  "S",
                                  "S<N::S<int> *>",
                                  "N"
                                ]
                              },
                              "qual_type" : {
                                "type_ptr" : 15
                              }
                            }
                          }
                        ]]
                      }
                    ]]
                  ]
                ]],
                ["CXXOperatorCallExpr" , [
                  {
                    "pointer" : 75,
                    "source_range" : [
                      {
                        "line" : 25,
                        "column" : 3
                      },
                      {
                        "column" : 15
                      }
                    ]
                  },
                  [
                    ["ImplicitCastExpr" , [
                      {
                        "pointer" : 76,
                        "source_range" : [
                          {
                            "column" : 13
                          },
                          {
                            "column" : 13
                          }
                        ]
                      },
                      [
                        ["DeclRefExpr" , [
                          {
                            "pointer" : 77,
                            "source_range" : [
                              {
                                "column" : 13
                              },
                              {
                                "column" : 13
                              }
                            ]
                          },
                          [
                          ],
                          {
                            "qual_type" : {
                              "type_ptr" : 51
                            },
                            "value_kind" : "LValue"
                          },
                          {
                            "decl_ref" : {
                              "kind" : "CXXMethod",
                              "decl_pointer" : 50,
                              "name" : {
                                "name" : "operator=",
                                "qual_name" : [
                                  "operator=",
                                  "S<int>",
                                  "N"
                                ]
                              },
                              "qual_type" : {
                                "type_ptr" : 51
                              }
                            }
                          }
                        ]]
                      ],
                      {
                        "qual_type" : {
                          "type_ptr" : 78
                        }
                      },
                      {
                        "cast_kind" : "FunctionToPointerDecay",
                        "base_path" : [
                        ]
                      }
                    ]],
                    ["MemberExpr" , [
                      {
                        "pointer" : 79,
                        "source_range" : [
                          {
                            "column" : 3
                          },
                          {
                            "column" : 7
                          }
                        ]
                      },
                      [
                        ["DeclRefExpr" , [
                          {
                            "pointer" : 80,
                            "source_range" : [
                              {
                                "column" : 3
                              },
                              {
                                "column" : 3
                              }
                            ]
                          },
                          [
                          ],
                          {
                            "qual_type" : {
                              "type_ptr" : 73
                            },
                            "value_kind" : "LValue"
                          },
                          {
                            "decl_ref" : {
                              "kind" : "Var",
                              "decl_pointer" : 74,
                              "name" : {
                                "name" : "val",
                                "qual_name" : [
                                  "val"
                                ]
                              },
                              "qual_type" : {
                                "type_ptr" : 73
                              }
                            }
                          }
                        ]]
                      ],
                      {
                        "qual_type" : {
                          "type_ptr" : 13
                        },
                        "value_kind" : "LValue"
                      },
                      {
                        "performs_virtual_dispatch" : true,
                        "name" : {
                          "name" : "field",
                          "qual_name" : [
                            "field",
                            "S<N::S<int> *>",
                            "N"
                          ]
                        },
                        "decl_ref" : {
                          "kind" : "Field",
                          "decl_pointer" : 12,
                          "name" : {
                            "name" : "field",
                            "qual_name" : [
                              "field",
                              "S<N::S<int> *>",
                              "N"
                            ]
                          },
                          "qual_type" : {
                            "type_ptr" : 13
                          }
                        }
                      }
                    ]],
                    ["ImplicitCastExpr" , [
                      {
                        "pointer" : 81,
                        "source_range" : [
                          {
                            "column" : 15
                          },
                          {
                            "column" : 15
                          }
                        ]
                      },
                      [
                        ["DeclRefExpr" , [
                          {
                            "pointer" : 82,
                            "source_range" : [
                              {
                                "column" : 15
                              },
                              {
                                "column" : 15
                              }
                            ]
                          },
                          [
                          ],
                          {
                            "qual_type" : {
                              "type_ptr" : 69
                            },
                            "value_kind" : "LValue"
                          },
                          {
                            "decl_ref" : {
                              "kind" : "ParmVar",
                              "decl_pointer" : 68,
                              "name" : {
                                "name" : "p",
                                "qual_name" : [
                                  "p"
                                ]
                              },
                              "qual_type" : {
                                "type_ptr" : 69
                              }
                            }
                          }
                        ]]
                      ],
                      {
                        "qual_type" : {
                          "type_ptr" : 69,
                          "is_const" : true
                        },
                        "value_kind" : "LValue"
                      },
                      {
                        "cast_kind" : "NoOp",
                        "base_path" : [
                        ]
                      }
                    ]]
                  ],
                  {
                    "qual_type" : {
                      "type_ptr" : 35
                    },
                    "value_kind" : "LValue"
                  }
                ]]
              ]
            ]]
          }
        ]]
      ],
      {
      },
      {
      }
    ]],
    ["TypedefDecl" , [
      {
        "pointer" : 83,
        "source_range" : [
          {
          },
          {
          }
        ],
        "is_implicit" : true
      },
      {
        "name" : "instancetype",
        "qual_name" : [
          "instancetype"
        ]
      },
      84,
      {
      }
    ]]
  ],
  {
  },
  {
    "input_path" : "tests/class_template.cpp",
    "input_kind" : "IK_CXX",
    "integer_type_widths" : {
      "char_type" : 8,
      "short_type" : 16,
      "int_type" : 32,
      "long_type" : 64,
      "longlong_type" : 64
    },
    "types" : [
      ["BuiltinType" , [
        {
          "pointer" : 85
        },
        "Void"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 86
        },
        "Bool"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 87
        },
        "Char_S"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 88
        },
        "SChar"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 89
        },
        "Short"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 38
        },
        "Int"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 90
        },
        "Long"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 91
        },
        "LongLong"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 92
        },
        "UChar"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 93
        },
        "UShort"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 94
        },
        "UInt"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 95
        },
        "ULong"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 96
        },
        "ULongLong"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 97
        },
        "Float"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 98
        },
        "Double"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 99
        },
        "LongDouble"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 100
        },
        "Float128"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 101
        },
        "Float16"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 102
        },
        "ShortAccum"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 103
        },
        "Accum"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 104
        },
        "LongAccum"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 105
        },
        "UShortAccum"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 106
        },
        "UAccum"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 107
        },
        "ULongAccum"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 108
        },
        "ShortFract"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 109
        },
        "Fract"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 110
        },
        "LongFract"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 111
        },
        "UShortFract"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 112
        },
        "UFract"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 113
        },
        "ULongFract"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 114
        },
        "SatShortAccum"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 115
        },
        "SatAccum"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 116
        },
        "SatLongAccum"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 117
        },
        "SatUShortAccum"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 118
        },
        "SatUAccum"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 119
        },
        "SatULongAccum"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 120
        },
        "SatShortFract"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 121
        },
        "SatFract"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 122
        },
        "SatLongFract"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 123
        },
        "SatUShortFract"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 124
        },
        "SatUFract"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 125
        },
        "SatULongFract"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 126
        },
        "Int128"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 127
        },
        "UInt128"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 128
        },
        "WChar_S"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 129
        },
        "Char8"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 130
        },
        "Char16"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 131
        },
        "Char32"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 132
        },
        "Dependent"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 133
        },
        "Overload"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 134
        },
        "BoundMember"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 135
        },
        "PseudoObject"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 136
        },
        "UnknownAny"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 137
        },
        "ARCUnbridgedCast"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 138
        },
        "BuiltinFn"
      ]],
      ["ComplexType" , [
        {
          "pointer" : 139
        }
      ]],
      ["ComplexType" , [
        {
          "pointer" : 140
        }
      ]],
      ["ComplexType" , [
        {
          "pointer" : 141
        }
      ]],
      ["ComplexType" , [
        {
          "pointer" : 142
        }
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 143
        },
        "ObjCId"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 144
        },
        "ObjCClass"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 145
        },
        "ObjCSel"
      ]],
      ["PointerType" , [
        {
          "pointer" : 146
        },
        {
          "type_ptr" : 85
        }
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 147
        },
        "NullPtr"
      ]],
      ["BuiltinType" , [
        {
          "pointer" : 148
        },
        "Half"
      ]],
      ["RecordType" , [
        {
          "pointer" : 149
        },
        150
      ]],
      ["PointerType" , [
        {
          "pointer" : 151
        },
        {
          "type_ptr" : 38,
          "is_const" : true
        }
      ]],
      ["PointerType" , [
        {
          "pointer" : 152
        },
        {
          "type_ptr" : 87,
          "is_const" : true
        }
      ]],
      ["PointerType" , [
        {
          "pointer" : 153
        },
        {
          "type_ptr" : 87
        }
      ]],
      ["RecordType" , [
        {
          "pointer" : 154
        },
        155
      ]],
      ["ConstantArrayType" , [
        {
          "pointer" : 156
        },
        {
          "element_type" : {
            "type_ptr" : 154
          },
          "stride" : 24
        },
        1
      ]],
      ["TemplateTypeParmType" , [
        {
          "pointer" : 157
        }
      ]],
      ["TemplateTypeParmType" , [
        {
          "pointer" : 158
        }
      ]],
      ["TemplateSpecializationType" , [
        {
          "pointer" : 159
        }
      ]],
      ["TemplateSpecializationType" , [
        {
          "pointer" : 160
        }
      ]],
      ["InjectedClassNameType" , [
        {
          "pointer" : 161
        }
      ]],
      ["TemplateTypeParmType" , [
        {
          "pointer" : 32
        }
      ]],
      ["PointerType" , [
        {
          "pointer" : 33
        },
        {
          "type_ptr" : 157
        }
      ]],
      ["PointerType" , [
        {
          "pointer" : 162
        },
        {
          "type_ptr" : 32
        }
      ]],
      ["TemplateSpecializationType" , [
        {
          "pointer" : 163
        }
      ]],
      ["TemplateSpecializationType" , [
        {
          "pointer" : 164
        }
      ]],
      ["InjectedClassNameType" , [
        {
          "pointer" : 29
        }
      ]],
      ["TemplateSpecializationType" , [
        {
          "pointer" : 165
        }
      ]],
      ["RecordType" , [
        {
          "pointer" : 35
        },
        34
      ]],
      ["TemplateSpecializationType" , [
        {
          "pointer" : 166,
          "desugared_type" : 35
        }
      ]],
      ["TemplateSpecializationType" , [
        {
          "pointer" : 69,
          "desugared_type" : 35
        }
      ]],
      ["FunctionProtoType" , [
        {
          "pointer" : 167
        },
        {
          "return_type" : {
            "type_ptr" : 85
          }
        },
        {
          "params_type" : [
            {
              "type_ptr" : 35
            }
          ]
        }
      ]],
      ["FunctionProtoType" , [
        {
          "pointer" : 67
        },
        {
          "return_type" : {
            "type_ptr" : 85
          }
        },
        {
          "params_type" : [
            {
              "type_ptr" : 69
            }
          ]
        }
      ]],
      ["TemplateSpecializationType" , [
        {
          "pointer" : 168,
          "desugared_type" : 35
        }
      ]],
      ["PointerType" , [
        {
          "pointer" : 27
        },
        {
          "type_ptr" : 35
        }
      ]],
      ["PointerType" , [
        {
          "pointer" : 169
        },
        {
          "type_ptr" : 168
        }
      ]],
      ["RecordType" , [
        {
          "pointer" : 10
        },
        9
      ]],
      ["TemplateSpecializationType" , [
        {
          "pointer" : 73,
          "desugared_type" : 10
        }
      ]],
      ["SubstTemplateTypeParmType" , [
        {
          "pointer" : 13,
          "desugared_type" : 35
        }
      ]],
      ["PointerType" , [
        {
          "pointer" : 170
        },
        {
          "type_ptr" : 13
        }
      ]],
      ["FunctionProtoType" , [
        {
          "pointer" : 171
        },
        {
          "return_type" : {
            "type_ptr" : 85
          }
        },
        {
        }
      ]],
      ["FunctionProtoType" , [
        {
          "pointer" : 172
        },
        {
          "return_type" : {
            "type_ptr" : 85
          }
        },
        {
        }
      ]],
      ["FunctionProtoType" , [
        {
          "pointer" : 173
        },
        {
          "return_type" : {
            "type_ptr" : 85
          }
        },
        {
        }
      ]],
      ["FunctionProtoType" , [
        {
          "pointer" : 41
        },
        {
          "return_type" : {
            "type_ptr" : 85
          }
        },
        {
        }
      ]],
      ["LValueReferenceType" , [
        {
          "pointer" : 22
        },
        {
          "type_ptr" : 10,
          "is_const" : true
        }
      ]],
      ["LValueReferenceType" , [
        {
          "pointer" : 45
        },
        {
          "type_ptr" : 35,
          "is_const" : true
        }
      ]],
      ["FunctionProtoType" , [
        {
          "pointer" : 174
        },
        {
          "return_type" : {
            "type_ptr" : 85
          }
        },
        {
          "params_type" : [
            {
              "type_ptr" : 45
            }
          ]
        }
      ]],
      ["FunctionProtoType" , [
        {
          "pointer" : 43
        },
        {
          "return_type" : {
            "type_ptr" : 85
          }
        },
        {
          "params_type" : [
            {
              "type_ptr" : 45
            }
          ]
        }
      ]],
      ["RValueReferenceType" , [
        {
          "pointer" : 49
        },
        {
          "type_ptr" : 35
        }
      ]],
      ["FunctionProtoType" , [
        {
          "pointer" : 175
        },
        {
          "return_type" : {
            "type_ptr" : 85
          }
        },
        {
          "params_type" : [
            {
              "type_ptr" : 49
            }
          ]
        }
      ]],
      ["FunctionProtoType" , [
        {
          "pointer" : 47
        },
        {
          "return_type" : {
            "type_ptr" : 85
          }
        },
        {
          "params_type" : [
            {
              "type_ptr" : 49
            }
          ]
        }
      ]],
      ["FunctionProtoType" , [
        {
          "pointer" : 176
        },
        {
          "return_type" : {
            "type_ptr" : 85
          }
        },
        {
          "params_type" : [
            {
              "type_ptr" : 22
            }
          ]
        }
      ]],
      ["FunctionProtoType" , [
        {
          "pointer" : 20
        },
        {
          "return_type" : {
            "type_ptr" : 85
          }
        },
        {
          "params_type" : [
            {
              "type_ptr" : 22
            }
          ]
        }
      ]],
      ["RValueReferenceType" , [
        {
          "pointer" : 26
        },
        {
          "type_ptr" : 10
        }
      ]],
      ["FunctionProtoType" , [
        {
          "pointer" : 177
        },
        {
          "return_type" : {
            "type_ptr" : 85
          }
        },
        {
          "params_type" : [
            {
              "type_ptr" : 26
            }
          ]
        }
      ]],
      ["FunctionProtoType" , [
        {
          "pointer" : 24
        },
        {
          "return_type" : {
            "type_ptr" : 85
          }
        },
        {
          "params_type" : [
            {
              "type_ptr" : 26
            }
          ]
        }
      ]],
      ["FunctionProtoType" , [
        {
          "pointer" : 15
        },
        {
          "return_type" : {
            "type_ptr" : 85
          }
        },
        {
        }
      ]],
      ["LValueReferenceType" , [
        {
          "pointer" : 178
        },
        {
          "type_ptr" : 35
        }
      ]],
      ["FunctionProtoType" , [
        {
          "pointer" : 179
        },
        {
          "return_type" : {
            "type_ptr" : 178
          }
        },
        {
          "params_type" : [
            {
              "type_ptr" : 45
            }
          ]
        }
      ]],
      ["FunctionProtoType" , [
        {
          "pointer" : 180
        },
        {
          "return_type" : {
            "type_ptr" : 178
          }
        },
        {
          "params_type" : [
            {
              "type_ptr" : 45
            }
          ]
        }
      ]],
      ["FunctionProtoType" , [
        {
          "pointer" : 181
        },
        {
          "return_type" : {
            "type_ptr" : 178
          }
        },
        {
          "params_type" : [
            {
              "type_ptr" : 49
            }
          ]
        }
      ]],
      ["FunctionProtoType" , [
        {
          "pointer" : 64
        },
        {
          "return_type" : {
            "type_ptr" : 178
          }
        },
        {
          "params_type" : [
            {
              "type_ptr" : 49
            }
          ]
        }
      ]],
      ["FunctionProtoType" , [
        {
          "pointer" : 51
        },
        {
          "return_type" : {
            "type_ptr" : 178
          }
        },
        {
          "params_type" : [
            {
              "type_ptr" : 45
            }
          ]
        }
      ]],
      ["PointerType" , [
        {
          "pointer" : 182
        },
        {
          "type_ptr" : 179
        }
      ]],
      ["PointerType" , [
        {
          "pointer" : 78
        },
        {
          "type_ptr" : 51
        }
      ]],
      ["ObjCObjectType" , [
        {
          "pointer" : 183
        },
        {
          "base_type" : 143
        }
      ]],
      ["ObjCObjectPointerType" , [
        {
          "pointer" : 184
        },
        {
          "type_ptr" : 183
        }
      ]],
      ["TypedefType" , [
        {
          "pointer" : 185,
          "desugared_type" : 184
        },
        {
          "child_type" : {
            "type_ptr" : 184
          },
          "decl_ptr" : 186
        }
      ]],
      ["TypedefType" , [
        {
          "pointer" : 84,
          "desugared_type" : 184
        },
        {
          "child_type" : {
            "type_ptr" : 185
          },
          "decl_ptr" : 83
        }
      ]],
      ["NoneType" , [
        {
          "pointer" : 0
        }
      ]]
    ]
  }
]]