Index: clang/lib/Sema/SemaExprCXX.cpp =================================================================== --- clang/lib/Sema/SemaExprCXX.cpp +++ clang/lib/Sema/SemaExprCXX.cpp @@ -1459,9 +1459,8 @@ QualType Ty = TInfo->getType(); SourceLocation TyBeginLoc = TInfo->getTypeLoc().getBeginLoc(); - assert((!ListInitialization || - (Exprs.size() == 1 && isa(Exprs[0]))) && - "List initialization must have initializer list as expression."); + assert((!ListInitialization || Exprs.size() == 1) && + "Too many expressions for list initialization."); SourceRange FullRange = SourceRange(TyBeginLoc, RParenOrBraceLoc); InitializedEntity Entity = Index: clang/test/SemaCXX/cxx0x-initializer-references.cpp =================================================================== --- clang/test/SemaCXX/cxx0x-initializer-references.cpp +++ clang/test/SemaCXX/cxx0x-initializer-references.cpp @@ -140,3 +140,21 @@ namespace PR21834 { const int &a = (const int &){0}; // expected-error {{cannot bind to an initializer list}} } + +namespace GH59100 { +class v {}; + +template +class V : public v {}; + +using T = const V &; + +template +void f() { + auto t = T{}; +} + +void z() { + f(); +} +} Index: clang/test/SemaCXX/cxx2a-consteval.cpp =================================================================== --- clang/test/SemaCXX/cxx2a-consteval.cpp +++ clang/test/SemaCXX/cxx2a-consteval.cpp @@ -1018,3 +1018,14 @@ (void)[](int i) consteval { return i; }(0); } } // namespace GH50455 + +namespace GH58302 { +struct A { + consteval A(){} + consteval operator int() { return 1;} +}; + +int f() { + int x = A{}; +} +}