diff options
author | Douglas Gregor <dgregor@apple.com> | 2012-04-04 05:10:53 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2012-04-04 05:10:53 +0000 |
commit | d280389b42bb55cd8969eae181dc3ff9f05e9aaf (patch) | |
tree | e75b6665dfd1e830eca7bd514747fe26092f262d /test/SemaCXX | |
parent | a9b55a499a8b5ae0c4b373f751ef62af74ec494e (diff) |
When performing template argument deduction for an initializer list,
be sure to perform the argument type adjustments in
[temp.deduct.call]p2, e.g., array decay.
And, when performing these deductions in the context of 'auto', make
sure that we're deducing the P' in std::initializer_list<P'> rather
than the whole initializer list.
Together, this makes code like
for( auto s : {"Deferred", "New", "Open", "Review"}) { }
work properly.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@153998 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/SemaCXX')
-rw-r--r-- | test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp b/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp index 0e0e8f254b..3437849f93 100644 --- a/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp +++ b/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp @@ -150,3 +150,19 @@ namespace PR12119 { g({il, {2, 3}}); } } + +namespace Decay { + template<typename T> + void f(std::initializer_list<T>) { + T x = 1; // expected-error{{cannot initialize a variable of type 'const char *' with an rvalue of type 'int'}} + } + + void g() { + f({"A", "BB", "CCC"}); // expected-note{{in instantiation of function template specialization 'Decay::f<const char *>' requested here}} + + auto x = { "A", "BB", "CCC" }; + std::initializer_list<const char *> *il = &x; + + for( auto s : {"A", "BB", "CCC", "DDD"}) { } + } +} |