p8-0x.cpp revision e3c7a7ca66c02567543dbb5ec493818e00e8b177
15f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// RUN: %clang_cc1 -std=c++0x -fsyntax-only -verify %s
25f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
35f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// Deductions specific to C++0x.
45f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
50bc735ffcfb223c0186419547abaa5c84482663eChris Lattnertemplate<typename T>
60bc735ffcfb223c0186419547abaa5c84482663eChris Lattnerstruct member_pointer_kind {
75f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer  static const unsigned value = 0;
85f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer};
95f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
105f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencertemplate<class C, typename R, typename ...Args>
115f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerstruct member_pointer_kind<R (C::*)(Args...)> {
125f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer  static const unsigned value = 1;
135f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer};
145f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
155f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencertemplate<class C, typename R, typename ...Args>
165f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerstruct member_pointer_kind<R (C::*)(Args...) &> {
17af8fa25c0d4e0540952a50bbd06dc1558954ccd9Ted Kremenek  static const unsigned value = 2;
185f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer};
199c1b750c59d510e6c9eccb1f37bccc46ccfe6844Ted Kremenek
20eb50ed88c2aa040fac08bf2a50bde4dd3da6eb19Chris Lattnertemplate<class C, typename R, typename ...Args>
215d75de0f821023f4ed4815825bf3aea8a0b5e40dChris Lattnerstruct member_pointer_kind<R (C::*)(Args...) &&> {
226137dc99ef0c2b14050631367057758b0d596cb3Ted Kremenek  static const unsigned value = 3;
231b63e4f732dbc73d90abf886b4d21f8e3a165f6dChris Lattner};
24d7a3e2c5f61cd4893f95b69a424fe4def3aa0f69Benjamin Kramer
25c7229c338c21ef26b01ef3ecf9eec4fd373fa9ecChris Lattnertemplate<class C, typename R, typename ...Args>
265f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerstruct member_pointer_kind<R (C::*)(Args...) const> {
27cc1a875f94630e58d24a55577ffbf0e89b7da8c7Chris Lattner  static const unsigned value = 4;
284f32786ac45210143654390177105eb749b614e9Ted Kremenek};
290827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis
30caaa7df2c78bbd40197823034c0275f3dcbd63e7Ted Kremenektemplate<class C, typename R, typename ...Args>
31f4d5eb4866a27d497f0bb75b12c2ffd48ad4d9c0Benjamin Kramerstruct member_pointer_kind<R (C::*)(Args...) const &> {
325b3284a9275a27f5c4410e25eb8933be540601d6Argyrios Kyrtzidis  static const unsigned value = 5;
330ea76727ae91bca918a8414ed85b530eddcfedebTed Kremenek};
342e22253e03e175144aeb9d13350a12fd83f858beDouglas Gregor
355f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencertemplate<class C, typename R, typename ...Args>
368fe83e1df954d72c0f4ffc15d20a5222ec151c21Benjamin Kramerstruct member_pointer_kind<R (C::*)(Args...) const &&> {
378fe83e1df954d72c0f4ffc15d20a5222ec151c21Benjamin Kramer  static const unsigned value = 6;
388fe83e1df954d72c0f4ffc15d20a5222ec151c21Benjamin Kramer};
398fe83e1df954d72c0f4ffc15d20a5222ec151c21Benjamin Kramer
405f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerstruct X { };
411eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
425f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerstatic_assert(member_pointer_kind<int (X::*)(int)>::value == 1, "");
4388a35862fbe473f2a4f0c19f24dbe536937e1dc6Douglas Gregorstatic_assert(member_pointer_kind<int (X::*)(int) &>::value == 2, "");
445f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerstatic_assert(member_pointer_kind<int (X::*)(int) &&>::value == 3, "");
455f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerstatic_assert(member_pointer_kind<int (X::*)(int) const>::value == 4, "");
465f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerstatic_assert(member_pointer_kind<int (X::*)(int) const&>::value == 5, "");
475f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerstatic_assert(member_pointer_kind<int (X::*)(int) const&&>::value == 6, "");
485f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer