1 // { dg-additional-options -fmodule-header } 2 // { dg-module-cmi {} } 3 4 template<typename T> struct TPL_1 { using type = T;}; 5 6 template<typename U> struct TPL_2 { using type = int;}; 7 8 template<typename V> using TPL_3 = typename TPL_2<V>::type; 9 10 template<typename A> 11 auto Foo (const A& arg) 12 -> TPL_3<typename TPL_1<decltype(arg)>::type> 13 {return 3;} 14 15 // Deliberately different to 3_a's Bar 16 template<typename A> 17 auto Bar (const A& arg) 18 -> TPL_3<typename TPL_1<int>::type> 19 {return 3;} 20 21