1 // RUN: %clang_cc1 %s -fsyntax-only -verify -std=c++11
4 template <short T
> class Type1
{};
5 template <short T
> void Function1(Type1
<T
>& x
) {} // expected-note{{candidate function [with T = -42] not viable: expects an lvalue for 1st argument}}
7 template <unsigned short T
> class Type2
{};
8 template <unsigned short T
> void Function2(Type2
<T
>& x
) {} // expected-note{{candidate function [with T = 42] not viable: expects an lvalue for 1st argument}}
10 enum class boolTy
: bool {
14 template <boolTy T
> struct Type3Helper
;
15 template <> struct Type3Helper
<boolTy::b
> { typedef boolTy Ty
; };
16 template <boolTy T
, typename Type3Helper
<T
>::Ty U
> struct Type3
{};
19 enum class charTy
: char {
23 template <charTy T
> struct Type4Helper
;
24 template <> struct Type4Helper
<charTy::c
> { typedef charTy Ty
; };
25 template <charTy T
, typename Type4Helper
<T
>::Ty U
> struct Type4
{};
27 enum class scharTy
: signed char {
31 template <scharTy T
> struct Type5Helper
;
32 template <> struct Type5Helper
<scharTy::c
> { typedef scharTy Ty
; };
33 template <scharTy T
, typename Type5Helper
<T
>::Ty U
> struct Type5
{};
35 enum class ucharTy
: unsigned char {
39 template <ucharTy T
> struct Type6Helper
;
40 template <> struct Type6Helper
<ucharTy::c
> { typedef ucharTy Ty
; };
41 template <ucharTy T
, typename Type6Helper
<T
>::Ty U
> struct Type6
{};
43 enum class wcharTy
: wchar_t {
47 template <wcharTy T
> struct Type7Helper
;
48 template <> struct Type7Helper
<wcharTy::c
> { typedef wcharTy Ty
; };
49 template <wcharTy T
, typename Type7Helper
<T
>::Ty U
> struct Type7
{};
51 enum class char16Ty
: char16_t
{
55 template <char16Ty T
> struct Type8Helper
;
56 template <> struct Type8Helper
<char16Ty::c
> { typedef char16Ty Ty
; };
57 template <char16Ty T
, typename Type8Helper
<T
>::Ty U
> struct Type8
{};
59 enum class char32Ty
: char16_t
{
63 template <char32Ty T
> struct Type9Helper
;
64 template <> struct Type9Helper
<char32Ty::c
> { typedef char32Ty Ty
; };
65 template <char32Ty T
, typename Type9Helper
<T
>::Ty U
> struct Type9
{};
68 Function1(Type1
<-42>()); // expected-error{{no matching function for call to 'Function1'}}
69 Function2(Type2
<42>()); // expected-error{{no matching function for call to 'Function2'}}
71 struct Type3
<boolTy::b
, "3"> t3
; // expected-error{{value of type 'const char[2]' is not implicitly convertible to 'typename Type3Helper<(boolTy)false>::Ty' (aka 'boolTy')}}
73 struct Type4
<charTy::c
, "4"> t4
; // expected-error{{value of type 'const char[2]' is not implicitly convertible to 'typename Type4Helper<(charTy)'\x00'>::Ty' (aka 'charTy')}}
74 struct Type5
<scharTy::c
, "5"> t5
; // expected-error{{value of type 'const char[2]' is not implicitly convertible to 'typename Type5Helper<(scharTy)'\x00'>::Ty' (aka 'scharTy')}}
75 struct Type6
<ucharTy::c
, "6"> t6
; // expected-error{{value of type 'const char[2]' is not implicitly convertible to 'typename Type6Helper<(ucharTy)'\x00'>::Ty' (aka 'ucharTy')}}
76 struct Type7
<wcharTy::c
, "7"> t7
; // expected-error{{value of type 'const char[2]' is not implicitly convertible to 'typename Type7Helper<(wcharTy)L'\x00'>::Ty' (aka 'wcharTy')}}
77 struct Type8
<char16Ty::c
, "8"> t8
; // expected-error{{value of type 'const char[2]' is not implicitly convertible to 'typename Type8Helper<(char16Ty)u'\x00'>::Ty' (aka 'char16Ty')}}
78 struct Type9
<char32Ty::c
, "9"> t9
; // expected-error{{value of type 'const char[2]' is not implicitly convertible to 'typename Type9Helper<(char32Ty)u'\x00'>::Ty' (aka 'char32Ty')}}