Getting the initializer for a constexpr

I have the following program:

template<int X>
class T {
  static constexpr int Y = X;
};
T<42> foo;

Clang generates the following AST (via -dump-ast).

TranslationUnitDecl 0x55feb1287d18 <<invalid sloc>> <invalid sloc>
|-TypedefDecl 0x55feb1288610 <<invalid sloc>> <invalid sloc> implicit __int128_t '__int128'
| `-BuiltinType 0x55feb12882b0 '__int128'
|-TypedefDecl 0x55feb1288680 <<invalid sloc>> <invalid sloc> implicit __uint128_t 'unsigned __int128'
| `-BuiltinType 0x55feb12882d0 'unsigned __int128'
|-TypedefDecl 0x55feb12889f8 <<invalid sloc>> <invalid sloc> implicit __NSConstantString '__NSConstantString_tag'
| `-RecordType 0x55feb1288770 '__NSConstantString_tag'
|   `-CXXRecord 0x55feb12886d8 '__NSConstantString_tag'
|-TypedefDecl 0x55feb1288a90 <<invalid sloc>> <invalid sloc> implicit __builtin_ms_va_list 'char *'
| `-PointerType 0x55feb1288a50 'char *'
|   `-BuiltinType 0x55feb1287db0 'char'
|-TypedefDecl 0x55feb12c9038 <<invalid sloc>> <invalid sloc> implicit __builtin_va_list '__va_list_tag [1]'
| `-ConstantArrayType 0x55feb12c8fe0 '__va_list_tag [1]' 1 
|   `-RecordType 0x55feb1288b80 '__va_list_tag'
|     `-CXXRecord 0x55feb1288ae8 '__va_list_tag'
|-ClassTemplateDecl 0x55feb12c91b0 <test_constexpr.cpp:7:1, line:13:1> line:8:7 T
| |-NonTypeTemplateParmDecl 0x55feb12c90a8 <line:7:10, col:14> col:14 referenced 'int' depth 0 index 0 X
| |-CXXRecordDecl 0x55feb12c9120 <line:8:1, line:13:1> line:8:7 class T definition
| | |-DefinitionData empty aggregate standard_layout trivially_copyable pod trivial literal has_constexpr_non_copy_move_ctor can_const_default_init
| | | |-DefaultConstructor exists trivial constexpr needs_implicit defaulted_is_constexpr
| | | |-CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param
| | | |-MoveConstructor exists simple trivial needs_implicit
| | | |-CopyAssignment simple trivial has_const_param needs_implicit implicit_has_const_param
| | | |-MoveAssignment exists simple trivial needs_implicit
| | | `-Destructor simple irrelevant trivial needs_implicit
| | |-CXXRecordDecl 0x55feb12c9410 <col:1, col:7> col:7 implicit class T
| | `-VarDecl 0x55feb12c94b8 <line:12:3, col:28> col:24 Y 'const int' static constexpr cinit
| |   `-DeclRefExpr 0x55feb12c9520 <col:28> 'int' NonTypeTemplateParm 0x55feb12c90a8 'X' 'int'
| `-ClassTemplateSpecializationDecl 0x55feb12c9598 <line:7:1, line:13:1> line:8:7 class T definition
|   |-DefinitionData pass_in_registers empty aggregate standard_layout trivially_copyable pod trivial literal has_constexpr_non_copy_move_ctor can_const_default_init
|   | |-DefaultConstructor exists trivial constexpr defaulted_is_constexpr
|   | |-CopyConstructor simple trivial has_const_param implicit_has_const_param
|   | |-MoveConstructor exists simple trivial
|   | |-CopyAssignment simple trivial has_const_param needs_implicit implicit_has_const_param
|   | |-MoveAssignment exists simple trivial needs_implicit
|   | `-Destructor simple irrelevant trivial needs_implicit
|   |-TemplateArgument integral 42
|   |-CXXRecordDecl 0x55feb12c9838 prev 0x55feb12c9598 <col:1, col:7> col:7 implicit class T
>> |   |-VarDecl 0x55feb12c98c8 <line:12:3, col:28> col:24 Y 'const int' static constexpr cinit
>> |   | |-value: Int 42
>> |   | `-SubstNonTypeTemplateParmExpr 0x55feb12c9960 <col:28> 'int'
>> |   |   |-NonTypeTemplateParmDecl 0x55feb12c90a8 <line:7:10, col:14> col:14 referenced 'int' depth 0 index 0 X
>> |   |   `-IntegerLiteral 0x55feb12c9940 <line:12:28> 'int' 42
|   |-CXXConstructorDecl 0x55feb12c9a08 <line:8:7> col:7 implicit used constexpr T 'void () noexcept' inline default trivial
|   | `-CompoundStmt 0x55feb12c9e98 <col:7>
|   |-CXXConstructorDecl 0x55feb12c9b38 <col:7> col:7 implicit constexpr T 'void (const T<42> &)' inline default trivial noexcept-unevaluated 0x55feb12c9b38
|   | `-ParmVarDecl 0x55feb12c9c48 <col:7> col:7 'const T<42> &'
|   `-CXXConstructorDecl 0x55feb12c9ce8 <col:7> col:7 implicit constexpr T 'void (T<42> &&)' inline default trivial noexcept-unevaluated 0x55feb12c9ce8
|     `-ParmVarDecl 0x55feb12c9df8 <col:7> col:7 'T<42> &&'
`-VarDecl 0x55feb12c9720 <line:14:1, col:7> col:7 foo 'T<42>':'T<42>' callinit
  `-CXXConstructExpr 0x55feb12c9ea8 <col:7> 'T<42>':'T<42>' 'void () noexcept'

In this AST, the VarDecl is initialized. However, when I traverse the AST the VarDecl doesn’t seem to have an initializer. When is the initializer set up in Clang?