From 222e2a7620e6520ffaf4fc4e69d79c18da31542e Mon Sep 17 00:00:00 2001 From: "Zancanaro; Carlo" Date: Mon, 24 Sep 2012 09:58:17 +1000 Subject: Add the clang library to the repo (with some of my changes, too). --- clang/test/SemaTemplate/fun-template-def.cpp | 48 ++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 clang/test/SemaTemplate/fun-template-def.cpp (limited to 'clang/test/SemaTemplate/fun-template-def.cpp') diff --git a/clang/test/SemaTemplate/fun-template-def.cpp b/clang/test/SemaTemplate/fun-template-def.cpp new file mode 100644 index 0000000..0427781 --- /dev/null +++ b/clang/test/SemaTemplate/fun-template-def.cpp @@ -0,0 +1,48 @@ +// RUN: %clang_cc1 -fsyntax-only -verify %s + +// Tests that dependent expressions are always allowed, whereas non-dependent +// are checked as usual. + +#include + +// Fake typeid, lacking a typeinfo header. +namespace std { class type_info {}; } + +struct dummy {}; // expected-note 3 {{candidate constructor (the implicit copy constructor)}} + +template +int f0(T x) { + return (sizeof(x) == sizeof(int))? 0 : (sizeof(x) == sizeof(double))? 1 : 2; +} + +template +T f1(T t1, U u1, int i1) +{ + T t2 = i1; + t2 = i1 + u1; + ++u1; + u1++; + int i2 = u1; + + i1 = t1[u1]; + i1 *= t1; + + i1(u1, t1); // error + u1(i1, t1); + + U u2 = (T)i1; + static_cast(static_cast(reinterpret_cast( + dynamic_cast(const_cast(i1))))); + + new U(i1, t1); + new int(t1, u1); + new (t1, u1) int; + delete t1; + + dummy d1 = sizeof(t1); // expected-error {{no viable conversion}} + dummy d2 = offsetof(T, foo); // expected-error {{no viable conversion}} + dummy d3 = __alignof(u1); // expected-error {{no viable conversion}} + i1 = typeid(t1); // expected-error {{assigning to 'int' from incompatible type 'const std::type_info'}} + + return u1; +} -- cgit v1.2.3