]> git.eshelyaron.com Git - emacs.git/commitdiff
Move tests in cedet/semantic
authorxscript <xscript@users.sourceforge.net>
Fri, 29 Apr 2011 00:32:56 +0000 (02:32 +0200)
committerEdward John Steere <edward.steere@gmail.com>
Wed, 25 Jan 2017 15:59:25 +0000 (17:59 +0200)
test/manual/cedet/cedet/semantic/tests/templates.cpp [new file with mode: 0644]

diff --git a/test/manual/cedet/cedet/semantic/tests/templates.cpp b/test/manual/cedet/cedet/semantic/tests/templates.cpp
new file mode 100644 (file)
index 0000000..881c5b2
--- /dev/null
@@ -0,0 +1,128 @@
+// C++ examples and requests from Klaus Berndl
+
+// template in a unnamed namespace
+namespace
+{
+  template<typename Target, typename Source>
+  Target lexical_cast(Source arg)
+  {
+    std::stringstream interpreter;
+    Target result;
+
+    if(!(interpreter << arg) || !(interpreter >> result) ||
+       !(interpreter >> std::ws).eof())
+      throw bad_lexical_cast();
+
+    return result;
+  }
+}
+
+
+template <class T, FOO> class Vector
+{
+private:
+  static T* v;
+  int sz;
+
+public:
+  T& elem(int i) {return v[i];}
+  virtual ~Vector ();
+
+protected:
+  Vector ();
+};
+
+template <> class Vector <void*>
+{
+private:
+  void** v;
+  int sz;
+
+public:
+  Vector ();
+  virtual int func1(int i);
+  virtual int func2(int i) = 0;
+  static virtual int func3(int i) = 0;
+  void*& elem(int i) {return v[i];}
+  //...
+};
+
+// template contains namespace
+typedef vector<CzkUtilities::Action*> ActionList;
+
+// declaration of some template-types
+map<XXX, Test::YYY>** map_var;
+
+map_with_size<XXX, Test::YYY, size> map_size_var;
+typedef map_with_size<XXX, Test::YYY, size> SizedMap;
+
+map_with_10_size<XXX, Test::YYY, 10>* pMap_size10_var;
+typedef map_with_10_size<XXX, Test::YYY, 10> Size10Map;
+
+// a function which such a template-argument
+void* test_function(map<ClassX, Test::ClassY, 10>* pMap);
+
+
+template <class T> class Vector <T*> : private Vector <void*>
+{
+public:
+       typedef Vector <void*> Base;
+
+       Vector () : Base() {}
+
+       T*& elem(int i) {return static_cast<T*&>(Base::elem(i));}
+       //...
+};
+
+// outside method implementation of a template-class
+template<class T> T& Vector<T*>::elem(int i)
+{
+  return C;
+}
+
+// same but qualified with a namespace Testnamespace
+template<class T> T& Testnamespace::Vector<T*>::elem(int i)
+{
+  return C;
+}
+
+// function templates with keyword typename
+template<typename Target, typename Source>
+Target lexical_cast(Source arg)
+{
+  std::stringstream interpreter;
+  Target result;
+
+  if(!(interpreter << arg) || !(interpreter >> result) ||
+     !(interpreter >> std::ws).eof())
+    throw bad_lexical_cast();
+
+  return result;
+}
+
+template<class T>
+static
+typename T::_ptr_type
+getService(const std::string& pServiceName, const int pRetries=20)
+{
+  return T::_narrow(getServiceObject(pServiceName, pRetries));
+}
+
+// function template declaration
+template<class T> void sort(vector<T>&);
+// complex function template definition
+template<class T, class S, const NamespaceY::ClassX<TestClass, &s> volatile ***&i>
+map<ClassY, ClassX, 10>
+sort(const vector<T>& v)
+{
+  return;
+}
+
+// variable declarations of template-types
+foo<TClass, Testnamespace::XClass, i> *bar1;
+foo<TClass, Testnamespace::XClass, **&i> *bar2;
+foo<TClass, Testnamespace::XClass, *Namespace::ClassX::i> bar3;
+foo<0> bar0;
+
+class SomeName;
+class OtherName;