Skip to content

[clang-format] IntegerLiteralSeparator breaks preprocessing conditionals with digit separators #145189

Open
@MorganCaron

Description

@MorganCaron

I'm using clang-format with the following IntegerLiteralSeparator settings:

IntegerLiteralSeparator:
  Binary: 4
  Decimal: 3
  Hex: 2

When formatting code like this:

#if __cpp_lib_smart_ptr_owner_equality >= 202306L

clang-format transforms it into:

#if __cpp_lib_smart_ptr_owner_equality >= 202'306L

which causes a compilation error because the preprocessor does not accept digit separators ' in numeric literals inside directives.

I’m aware that since C++20, there is an alternative to test feature macros using:

#if __has_cpp_attribute(__cpp_lib_smart_ptr_owner_equality)

However, it would still be useful to have either:

  • an option to disable IntegerLiteralSeparator only inside preprocessor directives, or
  • for the behavior to be changed so that IntegerLiteralSeparator is not applied at all to preprocessor lines or specific preprocessor instructions such as #if

This suggestion is intended to make formatting smoother and avoid breaking code when numeric literals appear in preprocessor conditionals

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions