aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae37.C
blob: e89106aac34060513ecf9d17e2b6ad70176730c5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// PR c++/51213
// { dg-do compile { target c++11 } }

class C {
  typedef int type;
};

template<int>
struct I;

template<>
struct I<2> { };

template<class T, class = typename T::type>
auto f(int) -> char;

template<class>
auto f(...) -> char (&)[2];

static_assert(sizeof(f<C>(0)) == 2, "Ouch");

typedef int testf[sizeof(f<C>(0)) == 2 ? 1 : -1];

I<sizeof(f<C>(0))> vf;

template<class T>
auto g(int) -> decltype(typename T::type(), char());

template<class>
auto g(...) -> char (&)[2];

static_assert(sizeof(g<C>(0)) == 2, "Ouch");

typedef int testg[sizeof(g<C>(0)) == 2 ? 1 : -1];

I<sizeof(g<C>(0))> vg;