]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Merge pull request #63 from tamiko/fix_manifold_instantiations
authorLuca Heltai <luca.heltai@sissa.it>
Thu, 7 Aug 2014 13:04:09 +0000 (15:04 +0200)
committerLuca Heltai <luca.heltai@sissa.it>
Thu, 7 Aug 2014 13:04:09 +0000 (15:04 +0200)
This commit reverts the quick fix in commit 982b0683.

The issue why we encountered unresolved references to
dealii::FlatManifold::FlatManifold(dealii::Point, double)
etc. was due to boilerplate instantiations of Triangulation::get_manifold
for cases with spacedim < dim (in order to make TriaAccessor happy).

This commit fixes the issue by using a nullptr-dereference in order to
return an invalid object - the specific code throws an error message before
that and should actually not be reachable at all.

1  2 
source/grid/tria.cc

index 03380582b99abec51fccff9f0872130135e29588,ff37b0787ed9565e4cda44ddb0b8b1e1c2d8a407..14da3cc2b9d25f74d7790335b33fc75c196ef030
@@@ -13272,27 -13290,33 +13272,36 @@@ Triangulation<dim, spacedim>::remove_re
  }
  
  template <>
 -const Manifold<2,1> & Triangulation<2, 1>::get_manifold(const types::manifold_id) const {
 +const Manifold<2,1> &Triangulation<2, 1>::get_manifold(const types::manifold_id) const
 +{
    Assert(false, ExcImpossibleInDim(1));
-   static FlatManifold<2,1> flat;
-   return flat;
+   // We cannot simply create a temporary Manifold<2,1> because it is not
+   // instantiated and would lead to unresolved symbols. Given the fact that
+   // this function should be unreachable anyaway, just dereference a
+   // nullptr:
+   return *static_cast<FlatManifold<2,1>*>(0);
  }
  
  template <>
 -const Manifold<3,1> & Triangulation<3, 1>::get_manifold(const types::manifold_id) const {
 +const Manifold<3,1> &Triangulation<3, 1>::get_manifold(const types::manifold_id) const
 +{
    Assert(false, ExcImpossibleInDim(1));
-   static FlatManifold<3,1> flat;
-   return flat;
+   // We cannot simply create a temporary Manifold<2,1> because it is not
+   // instantiated and would lead to unresolved symbols. Given the fact that
+   // this function should be unreachable anyaway, just dereference a
+   // nullptr:
+   return *static_cast<FlatManifold<3,1>*>(0);
  }
  
  template <>
 -const Manifold<3,2> & Triangulation<3, 2>::get_manifold(const types::manifold_id) const {
 +const Manifold<3,2> &Triangulation<3, 2>::get_manifold(const types::manifold_id) const
 +{
    Assert(false, ExcImpossibleInDim(2));
-   static FlatManifold<3,2> flat;
-   return flat;
+   // We cannot simply create a temporary Manifold<2,1> because it is not
+   // instantiated and would lead to unresolved symbols. Given the fact that
+   // this function should be unreachable anyaway, just dereference a
+   // nullptr:
+   return *static_cast<FlatManifold<3,2>*>(0);
  }
  
  // explicit instantiations

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.