1c9d7582cbe368687ea03acd7a33ca9cb96b7678fflorian// Simple smoke test to see that the demangler is actually working
2c9d7582cbe368687ea03acd7a33ca9cb96b7678fflorian
3c9d7582cbe368687ea03acd7a33ca9cb96b7678ffloriannamespace abc {
4c9d7582cbe368687ea03acd7a33ca9cb96b7678ffloriantemplate <typename T1, typename T2>
5c9d7582cbe368687ea03acd7a33ca9cb96b7678fflorianclass def {
6c9d7582cbe368687ea03acd7a33ca9cb96b7678fflorian  public:
7c9d7582cbe368687ea03acd7a33ca9cb96b7678fflorian    T1 xyzzy(T1 *p, T2 *)
8c9d7582cbe368687ea03acd7a33ca9cb96b7678fflorian    {
9c9d7582cbe368687ea03acd7a33ca9cb96b7678fflorian      return *p ? 10 : 20;
10c9d7582cbe368687ea03acd7a33ca9cb96b7678fflorian    }
11c9d7582cbe368687ea03acd7a33ca9cb96b7678fflorian  };
12c9d7582cbe368687ea03acd7a33ca9cb96b7678fflorian};
13c9d7582cbe368687ea03acd7a33ca9cb96b7678fflorian
14c9d7582cbe368687ea03acd7a33ca9cb96b7678ffloriantemplate <typename T>
15c9d7582cbe368687ea03acd7a33ca9cb96b7678fflorianclass magic {
16c9d7582cbe368687ea03acd7a33ca9cb96b7678fflorianpublic:
17c9d7582cbe368687ea03acd7a33ca9cb96b7678fflorian  T xyzzy(T *p)
18c9d7582cbe368687ea03acd7a33ca9cb96b7678fflorian  {
1903ba835ac18b429b3c767689a1365b1ef1356a25florian    return (new abc::def<int,typeof(*this)>)->xyzzy(p, 0);
20c9d7582cbe368687ea03acd7a33ca9cb96b7678fflorian  }
21c9d7582cbe368687ea03acd7a33ca9cb96b7678fflorian};
22c9d7582cbe368687ea03acd7a33ca9cb96b7678fflorian
23c9d7582cbe368687ea03acd7a33ca9cb96b7678fflorianint main()
24c9d7582cbe368687ea03acd7a33ca9cb96b7678fflorian{
25c9d7582cbe368687ea03acd7a33ca9cb96b7678fflorian   magic<int> *c = new magic<int>;
26c9d7582cbe368687ea03acd7a33ca9cb96b7678fflorian
27c9d7582cbe368687ea03acd7a33ca9cb96b7678fflorian   c->xyzzy(new int);
28c9d7582cbe368687ea03acd7a33ca9cb96b7678fflorian   return 0;
29c9d7582cbe368687ea03acd7a33ca9cb96b7678fflorian}
30