From: Douglas Gregor Date: Wed, 22 Jul 2009 15:45:39 +0000 (+0000) Subject: Test template instantiation for member functions of class templates defined X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5c7e281d368601858f9f5e5fe11734eea10b9523;p=clang Test template instantiation for member functions of class templates defined out of line. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@76740 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/CXX/temp/temp.decls/temp.class/temp.mem.func/p1inst.cpp b/test/CXX/temp/temp.decls/temp.class/temp.mem.func/p1inst.cpp new file mode 100644 index 0000000000..c505823a32 --- /dev/null +++ b/test/CXX/temp/temp.decls/temp.class/temp.mem.func/p1inst.cpp @@ -0,0 +1,17 @@ +// RUN: clang-cc -fsyntax-only -verify %s +// Test instantiation of member functions of class templates defined out-of-line +template +struct X0 { + void f(T *t, const U &u); + void f(T *); +}; + +template +void X0::f(T *t, const U &u) { + *t = u; // expected-error{{not assignable}} +} + +void test_f(X0 xfi, X0 xvi, float *fp, void *vp, int i) { + xfi.f(fp, i); + xvi.f(vp, i); // expected-note{{instantiation}} +} \ No newline at end of file diff --git a/test/SemaTemplate/example-dynarray.cpp b/test/SemaTemplate/example-dynarray.cpp index 680ee04ba1..7dcc508d2c 100644 --- a/test/SemaTemplate/example-dynarray.cpp +++ b/test/SemaTemplate/example-dynarray.cpp @@ -43,30 +43,8 @@ public: unsigned size() const { return Last - Start; } unsigned capacity() const { return End - Start; } - void push_back(const T& value) { - if (Last == End) { - unsigned NewCapacity = capacity() * 2; - if (NewCapacity == 0) - NewCapacity = 4; - - T* NewStart = (T*)malloc(sizeof(T) * NewCapacity); - - unsigned Size = size(); - for (unsigned I = 0; I != Size; ++I) - new (NewStart + I) T(Start[I]); - - // FIXME: destruct old values - free(Start); - - Start = NewStart; - Last = Start + Size; - End = Start + NewCapacity; - } - - new (Last) T(value); - ++Last; - } - + void push_back(const T& value); + void pop_back() { // FIXME: destruct old value --Last; @@ -108,6 +86,31 @@ public: T* Start, *Last, *End; }; +template +void dynarray::push_back(const T& value) { + if (Last == End) { + unsigned NewCapacity = capacity() * 2; + if (NewCapacity == 0) + NewCapacity = 4; + + T* NewStart = (T*)malloc(sizeof(T) * NewCapacity); + + unsigned Size = size(); + for (unsigned I = 0; I != Size; ++I) + new (NewStart + I) T(Start[I]); + + // FIXME: destruct old values + free(Start); + + Start = NewStart; + Last = Start + Size; + End = Start + NewCapacity; + } + + new (Last) T(value); + ++Last; +} + struct Point { Point() { x = y = z = 0.0; } Point(const Point& other) : x(other.x), y(other.y), z(other.z) { }