=====================================
Scoped function definitions
=====================================

int T::foo() { return 1; }
int T::foo() const { return 0; }

---

(translation_unit
  (function_definition
    (primitive_type)
    (function_declarator
      (scoped_identifier (namespace_identifier) (identifier))
      (parameter_list))
    (compound_statement (return_statement (number_literal))))
  (function_definition
    (primitive_type)
    (function_declarator
      (scoped_identifier (namespace_identifier) (identifier))
      (parameter_list)
      (type_qualifier))
    (compound_statement (return_statement (number_literal)))))

=====================================
Constructor definitions
=====================================

T::T() {}

T::T() : f1(0), f2(1, 2) {
  puts("HI");
}

---

(translation_unit
  (function_definition
    (function_declarator
      (scoped_identifier (namespace_identifier) (identifier))
      (parameter_list))
    (compound_statement))
  (function_definition
    (function_declarator
      (scoped_identifier (namespace_identifier) (identifier))
      (parameter_list))
    (field_initializer_list
      (field_initializer (field_identifier) (argument_list (number_literal)))
      (field_initializer (field_identifier) (argument_list (number_literal) (number_literal))))
    (compound_statement
      (expression_statement (call_expression (identifier) (argument_list (string_literal)))))))

=====================================
Destructor definitions
=====================================

~T() {}
T::~T() {}

---

(translation_unit
  (function_definition
    (function_declarator (destructor_name (identifier)) (parameter_list))
    (compound_statement))
  (function_definition
    (function_declarator
      (scoped_identifier (namespace_identifier) (destructor_name (identifier))) (parameter_list))
    (compound_statement)))
