Update copyright year to 2014 by running admin/update-copyright.
[emacs.git] / test / cedet / tests / testpolymorph.cpp
blobaba0dfe2a8943ccd95431eb2a5c19ce6915e1f1e
1 /** testpolymorph.cpp --- A sequence of polymorphism examples.
3 * Copyright (C) 2009-2014 Free Software Foundation, Inc.
5 * Author: Eric M. Ludlam <eric@siege-engine.com>
7 * This file is part of GNU Emacs.
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.
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.
19 * You should have received a copy of the GNU General Public License
20 * along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
23 #include <cmath>
25 // Test 1 - Functions w/ prototypes
26 namespace proto {
28 int pt_func1(int arg1);
29 int pt_func1(int arg1) {
30 return 0;
35 // Test 2 - Functions w/ different arg lists.
36 namespace fcn_poly {
38 int pm_func(void) {
39 return 0;
41 int pm_func(int a) {
42 return a;
44 int pm_func(char a) {
45 return int(a);
47 int pm_func(double a) {
48 return int(floor(a));
53 // Test 3 - Methods w/ different arg lists.
54 class meth_poly {
55 public:
56 int pm_meth(void) {
57 return 0;
59 int pm_meth(int a) {
60 return a;
62 int pm_meth(char a) {
63 return int(a);
65 int pm_meth(double a) {
66 return int(floor(a));
71 // Test 4 - Templates w/ partial specifiers.
72 namespace template_partial_spec {
73 template <typename T> class test
75 public:
76 void doSomething(T t) { };
79 template <typename T> class test<T *>
81 public:
82 void doSomething(T* t) { };
86 // Test 5 - Templates w/ full specialization which may or may not share
87 // common functions.
88 namespace template_full_spec {
89 template <typename T> class test
91 public:
92 void doSomething(T t) { };
93 void doSomethingElse(T t) { };
96 template <> class test<int>
98 public:
99 void doSomethingElse(int t) { };
100 void doSomethingCompletelyDifferent(int t) { };
104 // Test 6 - Dto., but for templates with multiple parameters.
105 namespace template_multiple_spec {
106 template <typename T1, typename T2> class test
108 public:
109 void doSomething(T1 t) { };
110 void doSomethingElse(T2 t) { };
113 template <typename T2> class test<int, T2>
115 public:
116 void doSomething(int t) { };
117 void doSomethingElse(T2 t) { };
120 template <> class test<float, int>
122 public:
123 void doSomething(float t) { };
124 void doSomethingElse(int t) { };
125 void doNothing(void) { };
130 // End of polymorphism test file.