1 // PR c++/42013
2 
3 template<typename _Tp>
4   _Tp
5 __attribute ((const)) declval();
6 
7 template<typename _Tp, typename _Up>
8   struct common_type
9   {
10     typedef __decltype(true  ? declval<_Tp>() : declval<_Up>()) typet;
11     typedef __decltype(false ? declval<_Tp>() : declval<_Up>()) typef;
12   };
13 
14 template<typename, typename> struct is_same;
15 
16 template<typename _Tp> struct is_same<_Tp, _Tp> { typedef _Tp type; };
17 
18 void f()
19 {
20   typedef common_type<int, const int>::typet typet;
21   typedef common_type<int, const int>::typef typef;
22 
23   typedef is_same<typet, typef>::type type;
24 }
25