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