diff options
-rw-r--r-- | lib/Sema/SemaInit.cpp | 4 | ||||
-rw-r--r-- | test/SemaCXX/cxx0x-initializer-references.cpp | 7 |
2 files changed, 11 insertions, 0 deletions
diff --git a/lib/Sema/SemaInit.cpp b/lib/Sema/SemaInit.cpp index 94dd2aa45c..26bb6efb8e 100644 --- a/lib/Sema/SemaInit.cpp +++ b/lib/Sema/SemaInit.cpp @@ -3024,6 +3024,10 @@ static void TryReferenceListInitialization(Sema &S, Sequence.RewrapReferenceInitList(cv1T1, InitList); return; } + + // Update the initializer if we've resolved an overloaded function. + if (Sequence.step_begin() != Sequence.step_end()) + Sequence.RewrapReferenceInitList(cv1T1, InitList); } // Not reference-related. Create a temporary and bind to that. diff --git a/test/SemaCXX/cxx0x-initializer-references.cpp b/test/SemaCXX/cxx0x-initializer-references.cpp index c4e9c907a3..283c32ac2e 100644 --- a/test/SemaCXX/cxx0x-initializer-references.cpp +++ b/test/SemaCXX/cxx0x-initializer-references.cpp @@ -90,3 +90,10 @@ namespace PR12660 { const int &i { 1 }; struct S { S(int); } const &s { 2 }; } + +namespace b7891773 { + typedef void (*ptr)(); + template <class T> void f(); + int g(const ptr &); + int k = g({ f<int> }); +} |