Skip to content

clang-format swaps constexpr and expression in requires-clause #53962

Closed
@cjdb

Description

@cjdb

Problem description

Given

template<typename F, typename... Args>
requires std::invocable<F, Args..., int*>
constexpr constructor(F create, Deleter destroy, Args const&... args) noexcept
{}

clang-format will restyle this as

template<typename F, typename... Args>
requires constexpr
std::invocable<F, Args..., int*> constructor(F create, Deleter destroy, Args const&... args) noexcept
{}

which is incorrect syntax.

System details

$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 20.04.4 LTS
Release:	20.04
Codename:	focal
$ clang-format --version
Ubuntu clang-format version 15.0.0-++20220218052900+34313583331e-1~exp1~20220218173003.163

Metadata

Metadata

Assignees

Labels

bugIndicates an unexpected problem or unintended behaviorclang-formatconfirmedVerified by a second partyinvalid-code-generationTool (e.g. clang-format) produced invalid code that no longer compiles

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions