'How are we allowed to use a name of a data member in the constructor when the data member is defined later [duplicate]

I am trying to understand how the below example works:

struct Custom
{
    Custom(int j): i(j) //i is defined later even then we're able to used `i` here. How?
    {
        
    }
    
    private:
       int i = 0;
};

As seen in my example above, the data member i is defined at a leter point and even then we're able to use that name i in the constructor initializer list. My question is which clause(s) from the standard allows this usage? I mean normally when lookup happens it searches for names in the upward direction. But here it looks like the lookup happens also happens in the downward direction. So which cluase(s) apply here.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source