summaryrefslogtreecommitdiff
path: root/test/SemaTemplate/constructor-template.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2009-12-14 19:27:10 +0000
committerDouglas Gregor <dgregor@apple.com>2009-12-14 19:27:10 +0000
commit6eef519fc8a97bb7ca6066f23d35e10f06b2c1b5 (patch)
treede9cffa3724d71d5d9c226d100c80aa10c3c8415 /test/SemaTemplate/constructor-template.cpp
parent1e46439a8ded433b90623752d253371bcbef60a6 (diff)
downloadclang-6eef519fc8a97bb7ca6066f23d35e10f06b2c1b5.tar.gz
Improve template instantiation for object constructions in several ways:
- During instantiation, drop default arguments from constructor and call expressions; they'll be recomputed anyway, and we don't want to instantiate them twice. - Rewrote the instantiation of variable initializers to cope with non-dependent forms properly. Together, these fix a handful of problems I introduced with the switch to always rebuild expressions from the source code "as written." git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@91315 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/SemaTemplate/constructor-template.cpp')
-rw-r--r--test/SemaTemplate/constructor-template.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/test/SemaTemplate/constructor-template.cpp b/test/SemaTemplate/constructor-template.cpp
index 203977e9ed..0b6916fa48 100644
--- a/test/SemaTemplate/constructor-template.cpp
+++ b/test/SemaTemplate/constructor-template.cpp
@@ -82,3 +82,15 @@ X4 test_X4(bool Cond, X4 x4) {
X4 b(x4); // okay, copy constructor
return X4(); // expected-error{{no viable conversion}}
}
+
+// Instantiation of a non-dependent use of a constructor
+struct DefaultCtorHasDefaultArg {
+ explicit DefaultCtorHasDefaultArg(int i = 17);
+};
+
+template<typename T>
+void default_ctor_inst() {
+ DefaultCtorHasDefaultArg def;
+}
+
+template void default_ctor_inst<int>();