blob: 710fa4ada55e70f2f452e2fcfa2333e4654b99b2 [file] [log] [blame]
Douglas Gregorc8ab2562009-05-31 09:31:02 +00001// RUN: clang-cc -fsyntax-only -verify %s
2template<typename T>
3struct is_pointer {
4 static const bool value = false;
5};
6
7template<typename T>
8struct is_pointer<T*> {
9 static const bool value = true;
10};
11
12template<typename T>
13struct is_pointer<const T*> {
14 static const bool value = true;
15};
16
17int array0[is_pointer<int>::value? -1 : 1];
18int array1[is_pointer<int*>::value? 1 : -1];
19int array2[is_pointer<const int*>::value? 1 : -1]; // expected-error{{partial ordering}} \
20// expected-error{{negative}}
Douglas Gregor0b9247f2009-06-04 00:03:07 +000021
Douglas Gregord560d502009-06-04 00:21:18 +000022template<typename T>
23struct is_lvalue_reference {
24 static const bool value = false;
25};
26
27template<typename T>
28struct is_lvalue_reference<T&> {
29 static const bool value = true;
30};
31
32int lvalue_ref0[is_lvalue_reference<int>::value? -1 : 1];
33int lvalue_ref1[is_lvalue_reference<const int&>::value? 1 : -1];
34
Douglas Gregor0b9247f2009-06-04 00:03:07 +000035template<typename T, typename U>
36struct is_same {
37 static const bool value = false;
38};
39
40template<typename T>
41struct is_same<T, T> {
42 static const bool value = true;
43};
44
45typedef int INT;
46typedef INT* int_ptr;
47
48int is_same0[is_same<int, int>::value? 1 : -1];
49int is_same1[is_same<int, INT>::value? 1 : -1];
50int is_same2[is_same<const int, int>::value? -1 : 1];
51int is_same3[is_same<int_ptr, int>::value? -1 : 1];