2 <clause number="18.1" title="Struct declarations">
3 <paragraph>A <non_terminal where="18.1">struct-declaration</non_terminal> is a <non_terminal where="16.5">type-declaration</non_terminal> (<hyperlink>16.5</hyperlink>) that declares a new struct: <grammar_production><name><non_terminal where="18.1">struct-declaration</non_terminal></name> : <rhs><non_terminal where="24.2">attributes</non_terminal><opt/><non_terminal where="18.1.1">struct-modifiers</non_terminal><opt/><keyword>struct</keyword><non_terminal where="9.4.2">identifier</non_terminal><non_terminal where="18.1.2">struct-interfaces</non_terminal><opt/><non_terminal where="18.1.3">struct-body</non_terminal><terminal>;</terminal><opt/></rhs></grammar_production></paragraph>
4 <paragraph>A <non_terminal where="18.1">struct-declaration</non_terminal> consists of an optional set of attributes (<hyperlink>24</hyperlink>), followed by an optional set of <non_terminal where="18.1.1">struct-modifier</non_terminal>s (<hyperlink>18.1.1</hyperlink>), followed by the keyword struct and an identifier that names the struct, followed by an optional <non_terminal where="18.1.2">struct-interfaces</non_terminal> specification (<hyperlink>18.1.2</hyperlink>), followed by a <non_terminal where="18.1.3">struct-body</non_terminal> (<hyperlink>18.1.3</hyperlink>), optionally followed by a semicolon. </paragraph>