From 78362bc5e609d653f88926ff8b5f7dad1b32e56d Mon Sep 17 00:00:00 2001 From: Neil Henderson Date: Tue, 30 Jul 2024 11:18:34 +1000 Subject: [PATCH 1/3] Move the ctor to out-of-line for `parameter_declaration_node` The `declaration_node` definition for the `unique_ptr` member is not yet visible if the ctor is written inline. --- source/parse.h | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/source/parse.h b/source/parse.h index 287747b0d..ab3b1a708 100644 --- a/source/parse.h +++ b/source/parse.h @@ -2273,7 +2273,9 @@ struct parameter_declaration_node std::unique_ptr declaration; - parameter_declaration_node(parameter_declaration_list_node const* my) : my_list{my} { } + // Out-of-line definition of the ctor is necessary due to the forward-declared + // type(s) used in a std::unique_ptr as a member + parameter_declaration_node(parameter_declaration_list_node const* my); // API // @@ -4512,7 +4514,11 @@ struct translation_unit_node } }; -// Definitions of out-of-line dtors for nodes with unique_ptr members of forward-declared types +// Definitions of out-of-line ctors & dtors for nodes with unique_ptr members of forward-declared types + +parameter_declaration_node::parameter_declaration_node(parameter_declaration_list_node const* my) + : my_list{my} +{ } type_id_node::~type_id_node() = default; From d724cd56915ec7d13fb25c58bea6dfe51d237fcc Mon Sep 17 00:00:00 2001 From: Neil Henderson Date: Tue, 30 Jul 2024 11:23:26 +1000 Subject: [PATCH 2/3] Add out-of-line dtor for `declaration_node` --- source/parse.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/parse.h b/source/parse.h index ab3b1a708..4dbc7ec16 100644 --- a/source/parse.h +++ b/source/parse.h @@ -2861,6 +2861,10 @@ struct declaration_node : parent_declaration{parent} { } + // Out-of-line definition of the dtor is necessary due to the forward-declared + // type(s) used in a std::unique_ptr as a member + ~declaration_node(); + // API // @@ -4542,6 +4546,8 @@ inspect_expression_node::~inspect_expression_node() = default; statement_node::~statement_node() = default; +declaration_node::~declaration_node() = default; + //----------------------------------------------------------------------- // From cd629754d19a50ae36bcdaa54bff7dd9bede6d64 Mon Sep 17 00:00:00 2001 From: Neil Henderson Date: Tue, 30 Jul 2024 11:27:23 +1000 Subject: [PATCH 3/3] Add out-of-line dtor for `parameter_declaration_node` --- source/parse.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/parse.h b/source/parse.h index 4dbc7ec16..3d46f035e 100644 --- a/source/parse.h +++ b/source/parse.h @@ -2277,6 +2277,10 @@ struct parameter_declaration_node // type(s) used in a std::unique_ptr as a member parameter_declaration_node(parameter_declaration_list_node const* my); + // Out-of-line definition of the dtor is necessary due to the forward-declared + // type(s) used in a std::unique_ptr as a member + ~parameter_declaration_node(); + // API // auto has_name() const @@ -4524,6 +4528,8 @@ parameter_declaration_node::parameter_declaration_node(parameter_declaration_lis : my_list{my} { } +parameter_declaration_node::~parameter_declaration_node() = default; + type_id_node::~type_id_node() = default; primary_expression_node::~primary_expression_node() = default;