Skip to content
Snippets Groups Projects
Commit 1ed2788c authored by Santiago Ospina De Los Ríos's avatar Santiago Ospina De Los Ríos
Browse files

[!23] fix gcc 10 compilation issue #24

Merge branch 'fix_gcc_10_compilation' into 'master'

ref:copasi/dune-copasi\>

-   non-const lambdas defined in a header have external linkage
    -   so if two compilation units include them get 'multiple definition'
        errors (at least with gcc 10)
    -   put lambdas defined in a header file inside anonymous namespace to
        resolve this
    -   resolves [#24]

Closes [#24]

See merge request [!23]

  [#24]: gitlab.dune-project.org/NoneNone/issues/24
  [!23]: gitlab.dune-project.org/copasi/dune-copasi/merge_requests/23


Closes #24
parents fd91d641 8df4028a
No related branches found
No related tags found
1 merge request!23fix gcc 10 compilation issue #24
Pipeline #29037 failed
......@@ -26,13 +26,14 @@ Types of changes
-->
## [Unreleased]
### Fixed
- Violation of the One-Definition-Rule due to external linkage of `LocalOperatorApply` lambdas !23
## [0.2.0] - 2020-02-20
### Added
- Code documentation
- Data Context concept for factories
- Factory concept for arbitrary object instantiation
- Add factories for finite element and finite element mas
- Add factories for finite element and finite element map
- Brief installation instructions
- Models can interpolate grid functions
- Grid utilities to recognize and mark tripes of entities
......
......@@ -7,13 +7,8 @@ clone_folder: C:\msys64\home\appveyor\dune-copasi
install:
- set PATH=C:\msys64\usr\bin;%PATH%
# download muparser, gmp and libtiff as static libraries: install to C:\libs
- mkdir temp
- cd temp
- appveyor DownloadFile "https://github.com/lkeegan/libsbml-static/releases/latest/download/libsbml-static-windows.zip"
- 7z x libsbml-static-windows.zip
- mkdir C:\libs
- mv include C:\libs\.
- mv lib C:\libs\.
- appveyor DownloadFile "https://github.com/lkeegan/libsbml-static/releases/latest/download/libsbml-static-win64.tgz"
- tar xf libsbml-static-win64.tgz -C /
- dir "C:\libs"
- cd C:\msys64\home\appveyor
......
......@@ -11,28 +11,28 @@ namespace LocalOperatorApply {
// Pattern helepers
auto patternVolume = [](const auto& lop, auto&... args)
static auto patternVolume = [](const auto& lop, auto&... args)
{
using LOP = std::decay_t<decltype(lop)>;
if constexpr (LOP::doPatternVolume)
lop.pattern_volume(args...);
};
auto patternVolumePostSkeleton = [](const auto& lop, auto&... args)
static auto patternVolumePostSkeleton = [](const auto& lop, auto&... args)
{
using LOP = std::decay_t<decltype(lop)>;
if constexpr (LOP::doPatternVolumePostSkeleton)
lop.pattern_volume_post_skeleton(args...);
};
auto patternSkeleton = [](const auto& lop, auto&... args)
static auto patternSkeleton = [](const auto& lop, auto&... args)
{
using LOP = std::decay_t<decltype(lop)>;
if constexpr (LOP::doPatternSkeleton)
lop.pattern_skeleton(args...);
};
auto patternBoundary = [](const auto& lop, auto&... args)
static auto patternBoundary = [](const auto& lop, auto&... args)
{
using LOP = std::decay_t<decltype(lop)>;
if constexpr (LOP::doPatternBoundary)
......@@ -41,28 +41,28 @@ auto patternBoundary = [](const auto& lop, auto&... args)
// Alpha helepers
auto alphaVolume = [](const auto& lop, auto&... args)
static auto alphaVolume = [](const auto& lop, auto&... args)
{
using LOP = std::decay_t<decltype(lop)>;
if constexpr (LOP::doAlphaVolume)
lop.alpha_volume(args...);
};
auto alphaVolumePostSkeleton = [](const auto& lop, auto&... args)
static auto alphaVolumePostSkeleton = [](const auto& lop, auto&... args)
{
using LOP = std::decay_t<decltype(lop)>;
if constexpr (LOP::doAlphaVolumePostSkeleton)
lop.alpha_volume_post_skeleton(args...);
};
auto alphaSkeleton = [](const auto& lop, auto&... args)
static auto alphaSkeleton = [](const auto& lop, auto&... args)
{
using LOP = std::decay_t<decltype(lop)>;
if constexpr (LOP::doAlphaSkeleton)
lop.alpha_skeleton(args...);
};
auto alphaBoundary = [](const auto& lop, auto&... args)
static auto alphaBoundary = [](const auto& lop, auto&... args)
{
using LOP = std::decay_t<decltype(lop)>;
if constexpr (LOP::doAlphaBoundary)
......@@ -72,28 +72,28 @@ auto alphaBoundary = [](const auto& lop, auto&... args)
// Lambda helepers
auto lambdaVolume = [](const auto& lop, auto&... args)
static auto lambdaVolume = [](const auto& lop, auto&... args)
{
using LOP = std::decay_t<decltype(lop)>;
if constexpr (LOP::doLambdaVolume)
lop.lambda_volume(args...);
};
auto lambdaVolumePostSkeleton = [](const auto& lop, auto&... args)
static auto lambdaVolumePostSkeleton = [](const auto& lop, auto&... args)
{
using LOP = std::decay_t<decltype(lop)>;
if constexpr (LOP::doLambdaVolumePostSkeleton)
lop.lambda_volume_post_skeleton(args...);
};
auto lambdaSkeleton = [](const auto& lop, auto&... args)
static auto lambdaSkeleton = [](const auto& lop, auto&... args)
{
using LOP = std::decay_t<decltype(lop)>;
if constexpr (LOP::doLambdaSkeleton)
lop.lambda_skeleton(args...);
};
auto lambdaBoundary = [](const auto& lop, auto&... args)
static auto lambdaBoundary = [](const auto& lop, auto&... args)
{
using LOP = std::decay_t<decltype(lop)>;
if constexpr (LOP::doLambdaBoundary)
......@@ -103,28 +103,28 @@ auto lambdaBoundary = [](const auto& lop, auto&... args)
// Jacobian helepers
auto jacobianVolume = [](const auto& lop, auto&... args)
static auto jacobianVolume = [](const auto& lop, auto&... args)
{
using LOP = std::decay_t<decltype(lop)>;
if constexpr (LOP::doAlphaVolume)
lop.jacobian_volume(args...);
};
auto jacobianVolumePostSkeleton = [](const auto& lop, auto&... args)
static auto jacobianVolumePostSkeleton = [](const auto& lop, auto&... args)
{
using LOP = std::decay_t<decltype(lop)>;
if constexpr (LOP::doAlphaVolumePostSkeleton)
lop.jacobian_volume_post_skeleton(args...);
};
auto jacobianSkeleton = [](const auto& lop, auto&... args)
static auto jacobianSkeleton = [](const auto& lop, auto&... args)
{
using LOP = std::decay_t<decltype(lop)>;
if constexpr (LOP::doAlphaSkeleton)
lop.jacobian_skeleton(args...);
};
auto jacobianBoundary = [](const auto& lop, auto&... args)
static auto jacobianBoundary = [](const auto& lop, auto&... args)
{
using LOP = std::decay_t<decltype(lop)>;
if constexpr (LOP::doAlphaBoundary)
......@@ -134,28 +134,28 @@ auto jacobianBoundary = [](const auto& lop, auto&... args)
// Jacobian apply helepers
auto jacobianApplyVolume = [](const auto& lop, auto&... args)
static auto jacobianApplyVolume = [](const auto& lop, auto&... args)
{
using LOP = std::decay_t<decltype(lop)>;
if constexpr (LOP::doAlphaVolume)
lop.jacobian_apply_volume(args...);
};
auto jacobianApplyVolumePostSkeleton = [](const auto& lop, auto&... args)
static auto jacobianApplyVolumePostSkeleton = [](const auto& lop, auto&... args)
{
using LOP = std::decay_t<decltype(lop)>;
if constexpr (LOP::doAlphaVolumePostSkeleton)
lop.jacobian_apply_volume_post_skeleton(args...);
};
auto jacobianApplySkeleton = [](const auto& lop, auto&... args)
static auto jacobianApplySkeleton = [](const auto& lop, auto&... args)
{
using LOP = std::decay_t<decltype(lop)>;
if constexpr (LOP::doAlphaSkeleton)
lop.jacobian_apply_skeleton(args...);
};
auto jacobianApplyBoundary = [](const auto& lop, auto&... args)
static auto jacobianApplyBoundary = [](const auto& lop, auto&... args)
{
using LOP = std::decay_t<decltype(lop)>;
if constexpr (LOP::doAlphaBoundary)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment