Skip to content

Commit 4fc753d

Browse files
authored
Workaround for MSVC (#4842)
This is needed for MSVC, because it does not seem to handle `using MLLinOpT<MF>::setLevelBC` correctly. Additional background: BLAST-WarpX/warpx#6406
1 parent bb5b552 commit 4fc753d

File tree

2 files changed

+15
-5
lines changed

2 files changed

+15
-5
lines changed

Src/LinearSolvers/MLMG/AMReX_MLCellLinOp.H

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ class MLCellLinOpT // NOLINT(cppcoreguidelines-virtual-class-destructor)
2121
{
2222
public:
2323

24-
using FAB = typename MF::fab_type;
25-
using RT = typename MF::value_type;
24+
using FAB = typename FabDataType<MF>::fab_type;
25+
using RT = typename FabDataType<MF>::value_type;
2626

2727
using BCType = LinOpBCType;
2828
using BCMode = typename MLLinOpT<MF>::BCMode;
@@ -48,7 +48,15 @@ public:
4848
const MF* robinbc_b = nullptr,
4949
const MF* robinbc_f = nullptr) final;
5050

51-
using MLLinOpT<MF>::setLevelBC;
51+
template <typename AMF, std::enable_if_t<!std::is_same_v<MF,AMF> &&
52+
IsMultiFabLike_v<AMF>, int> = 0>
53+
void setLevelBC (int amrlev, const AMF* levelbcdata,
54+
const AMF* robinbc_a = nullptr,
55+
const AMF* robinbc_b = nullptr,
56+
const AMF* robinbc_f = nullptr)
57+
{
58+
this->MLLinOpT<MF>::template setLevelBC<AMF>(amrlev, levelbcdata, robinbc_a, robinbc_b, robinbc_f);
59+
}
5260

5361
bool needsUpdate () const override {
5462
return MLLinOpT<MF>::needsUpdate();

Src/LinearSolvers/MLMG/AMReX_MLLinOp.H

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,8 @@ public:
235235
const MF* /*robinbc_b*/ = nullptr,
236236
const MF* /*robinbc_f*/ = nullptr) = 0;
237237

238-
template <typename AMF, std::enable_if_t<!std::is_same_v<MF,AMF>,int> = 0>
238+
template <typename AMF, std::enable_if_t<!std::is_same_v<MF,AMF> &&
239+
IsMultiFabLike_v<AMF>, int> = 0>
239240
void setLevelBC (int amrlev, const AMF* levelbcdata,
240241
const AMF* robinbc_a = nullptr,
241242
const AMF* robinbc_b = nullptr,
@@ -1607,7 +1608,8 @@ MLLinOpT<MF>::isMFIterSafe (int amrlev, int mglev1, int mglev2) const
16071608
}
16081609

16091610
template <typename MF>
1610-
template <typename AMF, std::enable_if_t<!std::is_same_v<MF,AMF>,int>>
1611+
template <typename AMF, std::enable_if_t<!std::is_same_v<MF,AMF> &&
1612+
IsMultiFabLike_v<AMF>, int> >
16111613
void
16121614
MLLinOpT<MF>::setLevelBC (int amrlev, const AMF* levelbcdata,
16131615
const AMF* robinbc_a, const AMF* robinbc_b,

0 commit comments

Comments
 (0)