1 // testtypedefs.cpp --- Sample with some fake bits out of std::string
2 
3 // Copyright (C) 2008-2021 Free Software Foundation, Inc.
4 
5 // Author: Eric M. Ludlam <zappo@gnu.org>
6 
7 // This file is part of GNU Emacs.
8 
9 // GNU Emacs is free software: you can redistribute it and/or modify
10 // it under the terms of the GNU General Public License as published by
11 // the Free Software Foundation, either version 3 of the License, or
12 // (at your option) any later version.
13 
14 // GNU Emacs is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 // GNU General Public License for more details.
18 
19 // You should have received a copy of the GNU General Public License
20 // along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
21 
22 // Thanks Ming-Wei Chang for these examples.
23 
24 namespace std {
25   template <T>class basic_string {
26   public:
27     void resize(int);
28   };
29 }
30 
31 typedef std::basic_string<char> mstring;
32 
33 using namespace std;
34 typedef basic_string<char> bstring;
35 
main()36 int main(){
37   mstring a;
38   a.// -1-
39     ;
40   // #1# ( "resize" )
41   bstring b;
42   // It doesn't work here.
43   b.// -2-
44     ;
45   // #2# ( "resize" )
46   return 0;
47 }
48 
49 // ------------------
50 
51 class Bar
52 {
53 public:
someFunc()54      void someFunc() {}
55 };
56 
57 typedef Bar new_Bar;
58 
59 template <class mytype>
60 class TBar
61 {
62 public:
otherFunc()63      void otherFunc() {}
64 };
65 
66 typedef TBar<char> new_TBar;
67 
main()68 int main()
69 {
70   new_Bar nb;
71   new_TBar ntb;
72 
73   nb.// -3-
74     ;
75   // #3# ("someFunc")
76   ntb.// -4-
77     ;
78   // #4# ("otherFunc")
79 
80   return 0;
81 }
82 
83 // ------------------
84 // Example from Yupeng.
85 
86 typedef struct epd_info {
87      int a;
88 } epd_info_t;
89 
epd_probe(struct platform_device * pdev)90 static int epd_probe(struct platform_device *pdev)
91 {
92      struct epd_info *db;
93      epd_info_t db1;
94 
95      db.// -5-
96        ; // #5# ("a")
97      db1.// -6-
98        ;// #6# ("a")
99 
100      return 1;
101 }
102 
103 // ------------------
104 // Example from Michel LAFON-PUYO
105 
106 typedef enum
107 {
108    ENUM1,
109    ENUM2
110 } e_toto;
111 
112 typedef struct
113 {
114    int field_a;
115    int field_b;
116 } t_toto;
117 
118 // Note: Error condition from anonymous types in a typedef
119 //       was that the first (ie - the enum) would be used in
120 //       place of the struct.
func(void)121 int func(void)
122 {
123    t_toto t;
124    t. // -7-
125      ; // #7# ( "field_a" "field_b" )
126    return 0;
127 }
128 
129 
130 // ------------------
131 // Example from Dixon Ryan
132 
133 
134 namespace NS2 {
135    class MyClass {
136 
137    public:
myFunction()138       void myFunction() { }
139    };
140 }
141 
142 typedef class NS2::MyClass* MyClassHandle;
143 
dixon(void)144 int dixon ( void ) {
145   MyClassHandle mch = getMyClassHandle();
146   NS2::MyClass* mcptr = getMyClassHandle();
147 
148   mcptr-> // -8-
149     ; // #8# ( "myFunction" )
150   mch-> // -    9- TODO bring over patch from SF
151     ; // #9# ( "myFunction" )
152   deleteMyClassHandle(mch);
153 
154   return 0;
155 }
156