]> https://gitweb.dealii.org/ - dealii-svn.git/commitdiff
workaround for gcc 3.1.0 bug
authorguido <guido@0785d39b-7218-0410-832d-ea1e28bc413d>
Wed, 10 Jul 2002 07:55:48 +0000 (07:55 +0000)
committerguido <guido@0785d39b-7218-0410-832d-ea1e28bc413d>
Wed, 10 Jul 2002 07:55:48 +0000 (07:55 +0000)
git-svn-id: https://svn.dealii.org/trunk@6239 0785d39b-7218-0410-832d-ea1e28bc413d

deal.II/base/source/legendre.cc
deal.II/base/source/polynomial.cc

index 83bd1ee069c8e78f1e80c3c1ebaebb601b33cb39..68926d5858921e2607c9df1c15dc5b9680fec37e 100644 (file)
@@ -46,6 +46,13 @@ namespace
 };
 
 
+// See polynomial.cc for an expalanation of this
+
+#if ((__GNUC__ == 3) && (__GNUC_MINOR__ == 1))
+#define SHIFT_TYPE double
+#else
+#define SHIFT_TYPE long double
+#endif
 
 template <typename number>
 void
@@ -97,9 +104,9 @@ Legendre<number>::compute_coefficients (const unsigned int k_)
          c0 = new std::vector<number>(*c0);
          c1 = new std::vector<number>(*c1);
          
-         Polynomial<number>::shift(*c0, (long double) -1.);
+         Polynomial<number>::shift(*c0, (SHIFT_TYPE) -1.);
          Polynomial<number>::scale(*c0, 2.);
-         Polynomial<number>::shift(*c1, (long double) -1.);
+         Polynomial<number>::shift(*c1, (SHIFT_TYPE) -1.);
          Polynomial<number>::scale(*c1, 2.);
          Polynomial<number>::multiply(*c1, std::sqrt(3.));
          shifted_coefficients[0]=c0;
@@ -141,7 +148,7 @@ Legendre<number>::compute_coefficients (const unsigned int k_)
                                           // and compute the
                                           // coefficients for [0,1]
          ck = new std::vector<number>(*ck);
-         shift(*ck,(long double) -1.);
+         shift(*ck,(SHIFT_TYPE) -1.);
          Polynomial<number>::scale(*ck, 2.);
          Polynomial<number>::multiply(*ck, std::sqrt(2.*k+1.));
          shifted_coefficients[k] = ck;
index 4ab8f8bc816b5a108e7fb29c1b79e2af31526965..e4a26f0bda2e87795f115ffa9b99a08b8d3d03bb 100644 (file)
@@ -464,7 +464,15 @@ template class Polynomial<long double>;
 
 template void Polynomial<float>::shift(const float offset);
 template void Polynomial<float>::shift(const double offset);
-template void Polynomial<float>::shift(const long double offset);
 template void Polynomial<double>::shift(const double offset);
-template void Polynomial<double>::shift(const long double offset);
 template void Polynomial<long double>::shift(const long double offset);
+
+// gcc 3.1 crashes withan internal error when trying to instantiate
+// these functions.
+
+#if ((__GNUC__ == 3) && (__GNUC_MINOR__ == 1))
+#warning Polynomial::shift with long double has been disabled in gcc 3.1
+#else
+template void Polynomial<float>::shift(const long double offset);
+template void Polynomial<double>::shift(const long double offset);
+#endif

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.