1 // { dg-additional-options -fmodules-ts }
2 
3 import inter;
4 
5 namespace details
6 {
7 
8 struct X
9 {
10 
11   int m;
XX12   X (int m) : m(m)
13   {
14   }
15 
16   operator int () const
17   {
18     return m;
19   }
20 };
21 
22 }
23 
24 namespace hidden
25 {
26 
27 struct Y
28 {
29 
30   int m;
YY31   Y (int m) : m(m)
32   {
33   }
34 
35   operator int () const
36   {
37     return m;
38   }
39 };
40 
41 }
42 
main()43 int main ()
44 {
45   details::X x(2);
46   hidden::Y y(2);
47 
48   // details::fn@worker is visible from TPL@inter
49   if (TPL (x) != 2) // instantiate TPL<details::X>(T&)
50     return 1;
51 
52   // hidden::fn@inter is visible from TPL@inter
53   if (TPL (y) != -2) // instantiate TPL<hidden::Y>(T&)
54     return 2;
55 
56   return 0;
57 }
58