Reject every interface member that uses a reserved name, static members included

Open
#452 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
48/100
Issue type
Feature
Clarity
Mostly clear
Activity status
Active
Tech stack
cpp

Research direction

Start with protocol_interface_function_infos, named_member_function_infos, and the StaticInterfaceMemberWithReservedNameIsIgnored test to understand the current filtering. Review DRAFT.md's “Reserved member names” section and the rejected/ignored lists in #407, then confirm the intended rule with the issue options. Done means the selected behavior is covered by tests and the related documentation and reserved-name lists are consistent.

Written by the indexing model from the issue text.

Description

Follow-up to #318, from the review of #449: https://github.com/jbcoe/cc-protocol/pull/449#discussion_r4057463300

#449 rejects a non-static interface member function named allocator_type, get_allocator or swap. A static member function with one of those names is skipped before the check, like every other static:

struct I {
  static void swap(I&, I&) noexcept;  // accepted and ignored
};

Nothing is hidden today, because interface statics are not forwarded. The case for rejecting it anyway:

  • The rule is simpler to state: an interface cannot declare a member with a reserved name.
  • Removing static later turns an accepted interface into a rejected one.
  • If interface statics are ever forwarded, the reserved name would hide the generated member silently, which is what #318 set out to stop.

The same argument covers members the check never sees. named_member_function_infos filters on is_function, so a data member, static data member, alias or nested type with a reserved name is accepted too:

struct I {
  using allocator_type = int;  // accepted and ignored
  int swap;                    // accepted and ignored
};

Options:

  1. Reject a static member function with a reserved name. Move has_reserved_member_name above the is_static_member skip in protocol_interface_function_infos.
  2. Reject any member with a reserved name, whatever its kind. Walk members_of the interface once, before the function filter.
  3. Leave statics and non-function members ignored, and say so in DRAFT.md.

2 gives the rule DRAFT.md can state in one sentence. Other statics stay ignored either way (#211, #403).

To change with it: the StaticInterfaceMemberWithReservedNameIsIgnored test, the "non-static member function" wording in DRAFT.md's "Reserved member names", and the rejected/ignored lists in #407. #450 adds protocol and protocol_view to reserved_member_names; the same rule should apply to them.

Dominant language
C++
Stars
11
Forks
4
Avg merge
15h 44m
Merged PRs (30d)
145

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from jbcoe/cc-protocol

All issues in jbcoe/cc-protocol

Similar issues

More C++ issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.