1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
// PR c++/54318 // { dg-do compile { target c++11 } } template <typename T> struct wrapped { typedef T type; }; template <typename T> typename T::type unwrap1(T); int unwrap(int); template <typename T> auto unwrap(T t) -> decltype(unwrap(unwrap1(t))) { return unwrap(unwrap1(t)); } int main() { unwrap(wrapped<wrapped<int>>()); }