@@ -184,18 +184,25 @@ namespace picongpu
184184
185185 auto pos = localCellIdx + relative_cellpos;
186186
187+ using DistanceReturnType = std::common_type_t <
188+ typename std::decay_t <decltype (sim.si .getCellSize ())>::type,
189+ typename std::decay_t <decltype (pos)>::type>;
190+
187191 if constexpr (T_Units == PositionUnits::SI)
188192 {
189- return precisionCast<typename std:: decay_t < decltype (sim. si . getCellSize ())>::type >(pos)
190- * sim.si .getCellSize ().shrink <simDim>();
193+ return precisionCast<DistanceReturnType >(pos)
194+ * precisionCast<DistanceReturnType>( sim.si .getCellSize ().shrink <simDim>() );
191195 }
192- if constexpr (T_Units == PositionUnits::PIC)
196+ else if constexpr (T_Units == PositionUnits::PIC)
193197 {
194- return precisionCast<typename std::decay_t <decltype (sim.pic .getCellSize ())>::type>(pos)
195- * sim.pic .getCellSize ().shrink <simDim>();
198+ return precisionCast<DistanceReturnType>(pos)
199+ * precisionCast<DistanceReturnType>(sim.pic .getCellSize ().shrink <simDim>());
200+ }
201+ // else T_Units == PositionUnits::Cell
202+ else
203+ {
204+ return pos;
196205 }
197-
198- return pos;
199206 }
200207 };
201208
@@ -296,32 +303,43 @@ namespace picongpu
296303 if constexpr (T_Units == PositionUnits::SI)
297304 {
298305 auto cellSize = sim.si .getCellSize ().shrink <simDim>();
299- return precisionCast<typename std:: decay_t < decltype (cellSize)>::type> (pos) * cellSize;
306+ return precisionCast<DistanceReturnType> (pos) * precisionCast<DistanceReturnType>( cellSize) ;
300307 }
301308 else if constexpr (T_Units == PositionUnits::PIC)
302309 {
303310 auto cellSize = sim.pic .getCellSize ().shrink <simDim>();
304- return precisionCast<typename std:: decay_t < decltype (cellSize)>::type> (pos) * cellSize;
311+ return precisionCast<DistanceReturnType> (pos) * precisionCast<DistanceReturnType>( cellSize) ;
305312 }
313+ // else T_Units == PositionUnits::Cell
306314 else
307315 {
308316 return pos;
309317 }
310318 }
319+ // T_Precision == PositionPrecision::Cell
311320 else
312321 {
322+ using DistanceReturnType = std::common_type_t <
323+ typename std::decay_t <decltype (sim.si .getCellSize ())>::type,
324+ typename std::decay_t <decltype (relative_cellpos)>::type>;
325+
313326 if constexpr (T_Units == PositionUnits::SI)
314327 {
315328 auto cellSize = sim.si .getCellSize ().shrink <simDim>();
316- return precisionCast<typename std::decay_t <decltype (cellSize)>::type>(relative_cellpos) * cellSize;
329+ return precisionCast<DistanceReturnType>(relative_cellpos)
330+ * precisionCast<DistanceReturnType>(cellSize);
317331 }
318- if constexpr (T_Units == PositionUnits::PIC)
332+ else if constexpr (T_Units == PositionUnits::PIC)
319333 {
320334 auto cellSize = sim.pic .getCellSize ().shrink <simDim>();
321- return precisionCast<typename std::decay_t <decltype (cellSize)>::type>(relative_cellpos) * cellSize;
335+ return precisionCast<DistanceReturnType>(relative_cellpos)
336+ * precisionCast<DistanceReturnType>(cellSize);
337+ }
338+ // else T_Units == PositionUnits::Cell
339+ else
340+ {
341+ return relative_cellpos;
322342 }
323-
324- return relative_cellpos;
325343 }
326344 }
327345 } // namespace plugins::binning
0 commit comments