1 // PR c++/67021
2 // { dg-do compile { target c++11 } }
3 
4 template<typename> struct Dummy;
5 template<> struct Dummy<int> {};
6 
7 template <class...>
8 struct all_same { static constexpr bool value = true; };
9 template <class T, class...Rest>
10 struct all_same<T, T, Rest...> : all_same<T, Rest...> {};
11 template <class T, class U, class...Rest>
12 struct all_same<T, U, Rest...> { static constexpr bool value = false; };
13 
14 template <class R>
15 using ValueType = int;
16 
17 template <class I>
18 constexpr bool A(I i) {
19   return all_same<ValueType<I>, ValueType<decltype(i++)>>::value;
20 }
21 
22 int main() {
23   static_assert(A(42), "");
24 }
25