Это не «запутывает» компилятор. Так как это список инициализатора члена, его область действия такая же, как и у конструктора. Поэтому область действия выигрывает над областью класса. И, следовательно, элемент age
инициализируется параметром age
.
. Обычно я бы не использовал одно и то же имя (хотя, конечно, возможно), так как оно хрупкое и несколько неясное. Например:
struct Decision {
bool launch_nukes;
Decision(bool /*launch_nukes*/) : launch_nukes(launch_nukes) {
}
};
В лучшем случае выдаст только предупреждение.