On Tuesday, 22 June 2021 21:52:16 CEST Jason Merrill wrote: > > 2. About the namespace aliases: IIUC an attribute would currently be > > rejected because of the C++ grammar. Do you want to make it valid before > > WG21 officially decides how to proceed? And if you have a pointer for me > > where I'd have to adjust the grammar rules, that'd help. > > You will want to adjust cp_parser_namespace_alias_definition to handle > attributes like cp_parser_namespace_definition. The latter currently > accepts attributes both before and after the name, which seems like a > good pattern to follow so it doesn't matter which WG21 chooses. > Probably best to pedwarn about C++11 attributes in both locations for > now, not just after.
This introduces an ambiguity in cp_parser_declaration. The function has to decide whether to call cp_parser_namespace_definition or fall back to cp_parser_block_declaration (which calls cp_parser_namespace_alias_definition). But now the parser has to look ahead a lot farther: namespace foo [[whatever]] {} namespace bar [[whatever]] = foo; I.e. only at '{' vs. '=' can cp_parser_declaration decide to call cp_parser_namespace_definition. Consequently, should I really modify cp_parser_namespace_definition to handle namespace aliases? Or can/should cp_parser_declaration look ahead behind the attribute(s)? How? With pedantic standard C++ it would be easy, since only these attribute placements are allowed: namespace [[whatever] foo {} namespace bar [[whatever]] = foo; -- ────────────────────────────────────────────────────────────────────────── Dr. Matthias Kretz https://mattkretz.github.io GSI Helmholtz Centre for Heavy Ion Research https://gsi.de std::experimental::simd https://github.com/VcDevel/std-simd ──────────────────────────────────────────────────────────────────────────