Skip to content

[clang-format] Multiline requires expression breaks formatting #160908

@adriankwiat

Description

@adriankwiat

When requires expression that has multiple statements is used as operand of binary operator (and some longer expression), code is formatted incorrectly (doesn't respect column limit).

Example input:

template <class>
inline constexpr bool some_long_name_just_for_example{true};

template <class T>
using Typ = T;

template <class Type>
concept C = requires {
  typename Typ<Type>;
  typename Typ<Type &>;
}
&& some_long_name_just_for_example<Type>
&& some_long_name_just_for_example<Type &>
&& some_long_name_just_for_example<const Type>;

int main() {}

Output:

template <class> inline constexpr bool some_long_name_just_for_example{true};

template <class T> using Typ = T;

template <class Type>
concept C = requires {
  typename Typ<Type>;
  typename Typ<Type &>;
} && some_long_name_just_for_example<Type> && some_long_name_just_for_example<Type &> && some_long_name_just_for_example<const Type>;

int main() {}

.clang_format:

BreakBeforeBinaryOperators: All
ColumnLimit: 80

clang-format version 20.1.8 (Fedora 20.1.8-4.fc42)

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