summaryrefslogtreecommitdiffstats
path: root/clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2014-07-16 21:33:43 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2014-07-16 21:33:43 +0000
commit5332411cd7464979fe6ee2e7bf48f87fb8055f96 (patch)
treeb3392abbf3cc422004cf545934c16d6d83df5e3f /clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp
parentc8491d3d838c3bbc272bf80cb0d0d8e5c0bbab3e (diff)
downloadbcm5719-llvm-5332411cd7464979fe6ee2e7bf48f87fb8055f96.tar.gz
bcm5719-llvm-5332411cd7464979fe6ee2e7bf48f87fb8055f96.zip
When list-initializing an object of class type, if we pick an initializer list
constructor (and pass it an implicitly-generated std::initializer_list object), be sure to mark the resulting construction as list-initialization. This fixes an assert in template instantiation where we previously thought we'd got direct non-list initialization without any parentheses. llvm-svn: 213201
Diffstat (limited to 'clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp')
-rw-r--r--clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp b/clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp
index db6614de037..eda4e44b773 100644
--- a/clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp
+++ b/clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp
@@ -238,3 +238,19 @@ namespace DR1070 {
S s[3] = { {1, 2, 3}, {4, 5} }; // ok
S *p = new S[3] { {1, 2, 3}, {4, 5} }; // ok
}
+
+namespace ListInitInstantiate {
+ struct A {
+ A(std::initializer_list<A>);
+ };
+ struct B : A {
+ B(int);
+ };
+ template<typename T> struct X {
+ X();
+ A a;
+ };
+ template<typename T> X<T>::X() : a{B{0}, B{1}} {}
+
+ X<int> x;
+}
OpenPOWER on IntegriCloud