PR c++/85765 - SFINAE and non-type default template arg.
[official-gcc.git] / gcc / testsuite / g++.dg / cpp0x / access02.C
blob74960a66a6137f450401fd55fbb833e598854e97
1 // PR c++/58954
2 // { dg-require-effective-target c++11 }
4 template<class T>
5 T&& declval();
7 template<class T>
8 struct foo_argument
10   template<class Ret, class C, class Arg>
11   static Arg test(Ret (C::*)(Arg));
13   typedef decltype(test(&T::template foo<>)) type;
16 template<class T, class>
17 struct dependent { typedef T type; };
19 template<class T>
20 struct base
22   template<class Ignore = void>
23   auto foo(int i) -> decltype(declval<
24     typename dependent<T&, Ignore>::type
25   >().foo_impl(i));
28 struct derived : base<derived>
30   friend struct base<derived>;
31 private:
32   int foo_impl(int i);
35 int main()
37   foo_argument<derived>::type var = 0;
38   return var;