diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-07-16 21:33:43 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-07-16 21:33:43 +0000 |
commit | 5332411cd7464979fe6ee2e7bf48f87fb8055f96 (patch) | |
tree | b3392abbf3cc422004cf545934c16d6d83df5e3f /clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp | |
parent | c8491d3d838c3bbc272bf80cb0d0d8e5c0bbab3e (diff) | |
download | bcm5719-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.cpp | 16 |
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; +} |