Index: clang/lib/Format/TokenAnnotator.cpp =================================================================== --- clang/lib/Format/TokenAnnotator.cpp +++ clang/lib/Format/TokenAnnotator.cpp @@ -2940,6 +2940,10 @@ return true; } + // auto{x} + if (Left.is(tok::kw_auto) && Right.isOneOf(tok::l_paren, tok::l_brace)) + return false; + // requires clause Concept1 && Concept2 if (Left.is(TT_ConstraintJunctions) && Right.is(tok::identifier)) return true; Index: clang/unittests/Format/FormatTest.cpp =================================================================== --- clang/unittests/Format/FormatTest.cpp +++ clang/unittests/Format/FormatTest.cpp @@ -22566,6 +22566,22 @@ EXPECT_EQ(Code, format(Code, Style)); } +TEST_F(FormatTest, FormatDecayCopy) { + verifyFormat("foo(auto())"); + verifyFormat("foo(auto{})"); + verifyFormat("foo(auto({}))"); + verifyFormat("foo(auto{{}})"); + verifyFormat("foo(auto(1))"); + verifyFormat("foo(auto{1})"); + verifyFormat("foo(new auto(1))"); + verifyFormat("foo(new auto{1})"); + verifyFormat("decltype(auto(1)) x;"); + verifyFormat("decltype(auto{1}) x;"); + verifyFormat("auto(x);"); + verifyFormat("auto{x};"); + verifyFormat("auto{x} = y;"); +} + } // namespace } // namespace format } // namespace clang