diff options
author | Douglas Gregor <dgregor@apple.com> | 2009-05-21 00:00:09 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2009-05-21 00:00:09 +0000 |
commit | d0fefbafd103c52964a3abd96f929917a8c1e847 (patch) | |
tree | e464916ee5767f3a5b0f42fa2e3523e385e8b963 /clang/test/SemaTemplate/instantiate-expr-4.cpp | |
parent | 8658bb565d1952c6b9531bc6bfa81238daadb0c4 (diff) | |
download | bcm5719-llvm-d0fefbafd103c52964a3abd96f929917a8c1e847.tar.gz bcm5719-llvm-d0fefbafd103c52964a3abd96f929917a8c1e847.zip |
Template instantiation for C++ "new" expressions.
llvm-svn: 72199
Diffstat (limited to 'clang/test/SemaTemplate/instantiate-expr-4.cpp')
-rw-r--r-- | clang/test/SemaTemplate/instantiate-expr-4.cpp | 45 |
1 files changed, 43 insertions, 2 deletions
diff --git a/clang/test/SemaTemplate/instantiate-expr-4.cpp b/clang/test/SemaTemplate/instantiate-expr-4.cpp index 8a3f7d858e4..a6bafc5b2ed 100644 --- a/clang/test/SemaTemplate/instantiate-expr-4.cpp +++ b/clang/test/SemaTemplate/instantiate-expr-4.cpp @@ -21,8 +21,8 @@ struct FunctionalCast0 { template struct FunctionalCast0<5>; -struct X { - X(int, int); +struct X { // expected-note 2 {{candidate function}} + X(int, int); // expected-note 2 {{candidate function}} }; template<int N, int M> @@ -42,3 +42,44 @@ struct Temporaries0 { }; template struct Temporaries0<5, 7>; + +// --------------------------------------------------------------------- +// new expressions +// --------------------------------------------------------------------- +struct Y { }; + +template<typename T> +struct New0 { + T* f(bool x) { + if (x) + return new T; // expected-error{{no matching}} + else + return new T(); + } +}; + +template struct New0<int>; +template struct New0<Y>; +template struct New0<X>; // expected-note{{instantiation}} + +template<typename T, typename Arg1> +struct New1 { + T* f(bool x, Arg1 a1) { + return new T(a1); // expected-error{{no matching}} + } +}; + +template struct New1<int, float>; +template struct New1<Y, Y>; +template struct New1<X, Y>; // expected-note{{instantiation}} + +template<typename T, typename Arg1, typename Arg2> +struct New2 { + T* f(bool x, Arg1 a1, Arg2 a2) { + return new T(a1, a2); // expected-error{{no matching}} + } +}; + +template struct New2<X, int, float>; +template struct New2<X, int, int*>; // expected-note{{instantiation}} +// FIXME: template struct New2<int, int, float>; |