Skip to content

Commit 94259cf

Browse files
authored
Merge branch 'AliceO2Group:dev' into feature/onnx-primary-pruning
2 parents 7a19c99 + fced507 commit 94259cf

246 files changed

Lines changed: 35202 additions & 3756 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎Common/Constants/include/CommonConstants/LHCConstants.h‎

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,13 @@ enum BeamDirection : int { BeamA, // beamA = beam 0,
3030
NBeamDirections,
3131
InteractingBC = -1 // as used in the BunchFilling class
3232
};
33-
GPUglobalconstexpr() int LHCMaxBunches = 3564; // max N bunches
34-
constexpr double LHCRFFreq = 400.789e6; // LHC RF frequency in Hz
35-
constexpr double LHCBunchSpacingNS = 10 * 1.e9 / LHCRFFreq; // bunch spacing in ns (10 RFbuckets)
36-
constexpr double LHCOrbitNS = LHCMaxBunches * LHCBunchSpacingNS; // orbit duration in ns
37-
constexpr double LHCRevFreq = 1.e9 / LHCOrbitNS; // revolution frequency
38-
constexpr double LHCBunchSpacingMUS = LHCBunchSpacingNS * 1e-3; // bunch spacing in \mus (10 RFbuckets)
39-
constexpr double LHCOrbitMUS = LHCOrbitNS * 1e-3; // orbit duration in \mus
33+
GPUglobalconstexpr() int LHCMaxBunches = 3564; // max N bunches
34+
GPUglobalconstexpr() double LHCRFFreq = 400.789e6; // LHC RF frequency in Hz
35+
GPUglobalconstexpr() double LHCBunchSpacingNS = 10 * 1.e9 / LHCRFFreq; // bunch spacing in ns (10 RFbuckets)
36+
GPUglobalconstexpr() double LHCOrbitNS = LHCMaxBunches * LHCBunchSpacingNS; // orbit duration in ns
37+
GPUglobalconstexpr() double LHCRevFreq = 1.e9 / LHCOrbitNS; // revolution frequency
38+
GPUglobalconstexpr() double LHCBunchSpacingMUS = LHCBunchSpacingNS * 1e-3; // bunch spacing in \mus (10 RFbuckets)
39+
GPUglobalconstexpr() double LHCOrbitMUS = LHCOrbitNS * 1e-3; // orbit duration in \mus
4040
GPUglobalconstexpr() unsigned int MaxNOrbits = 0xffffffff;
4141

4242
// Offsets of A, C beam bunches at P2

‎Common/Constants/include/CommonConstants/PhysicsConstants.h‎

Lines changed: 146 additions & 138 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
#ifndef ALICEO2_PHYSICSCONSTANTS_H_
1919
#define ALICEO2_PHYSICSCONSTANTS_H_
2020

21+
#include "GPUCommonDef.h"
22+
2123
namespace o2::constants::physics
2224
{
2325
// particles masses
@@ -98,157 +100,163 @@ enum Pdg {
98100
kLambda1520_Py = 102134,
99101
kK1_1270_0 = 10313,
100102
kK1_1270Plus = 10323,
101-
kCDeuteron = 2010010020
103+
kCDeuteron = 2010010020,
104+
kXi1820Minus = 123314,
105+
kXi1820Zero = 123324,
106+
kOmega2012Minus = 123334
102107
};
103108

104109
/// \brief Declarations of masses for additional particles
105-
constexpr double MassEta = 0.547862;
106-
constexpr double MassOmega = 0.78266;
107-
constexpr double MassEtaPrime = 0.95778;
108-
constexpr double MassB0 = 5.27966;
109-
constexpr double MassB0Bar = 5.27966;
110-
constexpr double MassBPlus = 5.27934;
111-
constexpr double MassBCPlus = 6.27447;
112-
constexpr double MassBS = 5.36692;
113-
constexpr double MassBSBar = 5.36692;
114-
constexpr double MassD0 = 1.86484;
115-
constexpr double MassD0Bar = 1.86484;
116-
constexpr double MassD0StarPlus = 2.272;
117-
constexpr double MassD0Star0 = 2.343;
118-
constexpr double MassD1Plus = 2.372;
119-
constexpr double MassD10 = 2.412;
120-
constexpr double MassD2StarPlus = 2.4601;
121-
constexpr double MassD2Star0 = 2.4611;
122-
constexpr double MassDMinus = 1.86966;
123-
constexpr double MassDPlus = 1.86966;
124-
constexpr double MassDS = 1.96835;
125-
constexpr double MassDSBar = 1.96835;
126-
constexpr double MassDSStar = 2.1122;
127-
constexpr double MassDS1 = 2.53511;
128-
constexpr double MassDS1Star2700 = 2.714;
129-
constexpr double MassDS1Star2860 = 2.859;
130-
constexpr double MassDS2Star = 2.5691;
131-
constexpr double MassDS3Star2860 = 2.86;
132-
constexpr double MassDStar = 2.01026;
133-
constexpr double MassDStar0 = 2.00685;
134-
constexpr double MassChiC1 = 3.51067;
135-
constexpr double MassJPsi = 3.0969;
136-
constexpr double MassLambdaB0 = 5.6196;
137-
constexpr double MassLambdaCPlus = 2.28646;
138-
constexpr double MassLambdaCPlus2860 = 2.8561;
139-
constexpr double MassLambdaCPlus2880 = 2.8816;
140-
constexpr double MassLambdaCPlus2940 = 2.9396;
141-
constexpr double MassOmegaC0 = 2.6952;
142-
constexpr double MassK0Star892 = 0.89555;
143-
constexpr double MassKPlusStar892 = 0.89167;
144-
constexpr double MassPhi = 1.019461;
145-
constexpr double MassSigmaC0 = 2.45375;
146-
constexpr double MassSigmaCPlusPlus = 2.45397;
147-
constexpr double MassSigmaCStar0 = 2.51848;
148-
constexpr double MassSigmaCStarPlusPlus = 2.51841;
149-
constexpr double MassX3872 = 3.87165;
150-
constexpr double MassXi0 = 1.31486;
151-
constexpr double MassXiB0 = 5.7919;
152-
constexpr double MassXiCCPlusPlus = 3.62155;
153-
constexpr double MassXiCPlus = 2.46771;
154-
constexpr double MassXiC0 = 2.47044;
155-
constexpr double MassXiC3055Plus = 3.0559;
156-
constexpr double MassXiC3080Plus = 3.0772;
157-
constexpr double MassXiC3055_0 = 3.059;
158-
constexpr double MassXiC3080_0 = 3.0799;
159-
constexpr double MassDeuteron = 1.87561294257;
160-
constexpr double MassTriton = 2.80892113298;
161-
constexpr double MassHelium3 = 2.80839160743;
162-
constexpr double MassAlpha = 3.7273794066;
163-
constexpr double MassLithium4 = 3.7513;
164-
constexpr double MassHyperTriton = 2.991134;
165-
constexpr double MassHyperHydrogen4 = 3.922434;
166-
constexpr double MassHyperHelium4 = 3.921728;
167-
constexpr double MassHyperHelium5 = 4.839961;
168-
constexpr double MassHyperHelium4Sigma = 3.995;
169-
constexpr double MassLambda1520_Py = 1.5195;
170-
constexpr double MassK1_1270_0 = 1.253;
171-
constexpr double MassK1_1270Plus = 1.272;
172-
constexpr double MassCDeuteron = 3.226;
110+
GPUglobalconstexpr() double MassEta = 0.547862;
111+
GPUglobalconstexpr() double MassOmega = 0.78266;
112+
GPUglobalconstexpr() double MassEtaPrime = 0.95778;
113+
GPUglobalconstexpr() double MassB0 = 5.27966;
114+
GPUglobalconstexpr() double MassB0Bar = 5.27966;
115+
GPUglobalconstexpr() double MassBPlus = 5.27934;
116+
GPUglobalconstexpr() double MassBCPlus = 6.27447;
117+
GPUglobalconstexpr() double MassBS = 5.36692;
118+
GPUglobalconstexpr() double MassBSBar = 5.36692;
119+
GPUglobalconstexpr() double MassD0 = 1.86484;
120+
GPUglobalconstexpr() double MassD0Bar = 1.86484;
121+
GPUglobalconstexpr() double MassD0StarPlus = 2.272;
122+
GPUglobalconstexpr() double MassD0Star0 = 2.343;
123+
GPUglobalconstexpr() double MassD1Plus = 2.372;
124+
GPUglobalconstexpr() double MassD10 = 2.412;
125+
GPUglobalconstexpr() double MassD2StarPlus = 2.4601;
126+
GPUglobalconstexpr() double MassD2Star0 = 2.4611;
127+
GPUglobalconstexpr() double MassDMinus = 1.86966;
128+
GPUglobalconstexpr() double MassDPlus = 1.86966;
129+
GPUglobalconstexpr() double MassDS = 1.96835;
130+
GPUglobalconstexpr() double MassDSBar = 1.96835;
131+
GPUglobalconstexpr() double MassDSStar = 2.1122;
132+
GPUglobalconstexpr() double MassDS1 = 2.53511;
133+
GPUglobalconstexpr() double MassDS1Star2700 = 2.714;
134+
GPUglobalconstexpr() double MassDS1Star2860 = 2.859;
135+
GPUglobalconstexpr() double MassDS2Star = 2.5691;
136+
GPUglobalconstexpr() double MassDS3Star2860 = 2.86;
137+
GPUglobalconstexpr() double MassDStar = 2.01026;
138+
GPUglobalconstexpr() double MassDStar0 = 2.00685;
139+
GPUglobalconstexpr() double MassChiC1 = 3.51067;
140+
GPUglobalconstexpr() double MassJPsi = 3.0969;
141+
GPUglobalconstexpr() double MassLambdaB0 = 5.6196;
142+
GPUglobalconstexpr() double MassLambdaCPlus = 2.28646;
143+
GPUglobalconstexpr() double MassLambdaCPlus2860 = 2.8561;
144+
GPUglobalconstexpr() double MassLambdaCPlus2880 = 2.8816;
145+
GPUglobalconstexpr() double MassLambdaCPlus2940 = 2.9396;
146+
GPUglobalconstexpr() double MassOmegaC0 = 2.6952;
147+
GPUglobalconstexpr() double MassK0Star892 = 0.89555;
148+
GPUglobalconstexpr() double MassKPlusStar892 = 0.89167;
149+
GPUglobalconstexpr() double MassPhi = 1.019461;
150+
GPUglobalconstexpr() double MassSigmaC0 = 2.45375;
151+
GPUglobalconstexpr() double MassSigmaCPlusPlus = 2.45397;
152+
GPUglobalconstexpr() double MassSigmaCStar0 = 2.51848;
153+
GPUglobalconstexpr() double MassSigmaCStarPlusPlus = 2.51841;
154+
GPUglobalconstexpr() double MassX3872 = 3.87165;
155+
GPUglobalconstexpr() double MassXi0 = 1.31486;
156+
GPUglobalconstexpr() double MassXiB0 = 5.7919;
157+
GPUglobalconstexpr() double MassXiCCPlusPlus = 3.62155;
158+
GPUglobalconstexpr() double MassXiCPlus = 2.46771;
159+
GPUglobalconstexpr() double MassXiC0 = 2.47044;
160+
GPUglobalconstexpr() double MassXiC3055Plus = 3.0559;
161+
GPUglobalconstexpr() double MassXiC3080Plus = 3.0772;
162+
GPUglobalconstexpr() double MassXiC3055_0 = 3.059;
163+
GPUglobalconstexpr() double MassXiC3080_0 = 3.0799;
164+
GPUglobalconstexpr() double MassDeuteron = 1.87561294257;
165+
GPUglobalconstexpr() double MassTriton = 2.80892113298;
166+
GPUglobalconstexpr() double MassHelium3 = 2.80839160743;
167+
GPUglobalconstexpr() double MassAlpha = 3.7273794066;
168+
GPUglobalconstexpr() double MassLithium4 = 3.7513;
169+
GPUglobalconstexpr() double MassHyperTriton = 2.991134;
170+
GPUglobalconstexpr() double MassHyperHydrogen4 = 3.922434;
171+
GPUglobalconstexpr() double MassHyperHelium4 = 3.921728;
172+
GPUglobalconstexpr() double MassHyperHelium5 = 4.839961;
173+
GPUglobalconstexpr() double MassHyperHelium4Sigma = 3.995;
174+
GPUglobalconstexpr() double MassLambda1520_Py = 1.5195;
175+
GPUglobalconstexpr() double MassK1_1270_0 = 1.253;
176+
GPUglobalconstexpr() double MassK1_1270Plus = 1.272;
177+
GPUglobalconstexpr() double MassCDeuteron = 3.226;
178+
GPUglobalconstexpr() double MassXi1820Minus = 1.8234;
179+
GPUglobalconstexpr() double MassXi1820Zero = 1.8234;
180+
GPUglobalconstexpr() double MassOmega2012Minus = 2.0125;
173181

174182
/// \brief Declarations of masses for particles in ROOT PDG_t
175-
constexpr double MassDown = 0.00467;
176-
constexpr double MassDownBar = 0.00467;
177-
constexpr double MassUp = 0.00216;
178-
constexpr double MassUpBar = 0.00216;
179-
constexpr double MassStrange = 0.0934;
180-
constexpr double MassStrangeBar = 0.0934;
181-
constexpr double MassCharm = 1.27;
182-
constexpr double MassCharmBar = 1.27;
183-
constexpr double MassBottom = 4.18;
184-
constexpr double MassBottomBar = 4.18;
185-
constexpr double MassTop = 172.5;
186-
constexpr double MassTopBar = 172.5;
187-
constexpr double MassGluon = 0.0;
188-
constexpr double MassElectron = 0.000510999;
189-
constexpr double MassPositron = 0.000510999;
190-
constexpr double MassNuE = 0.0;
191-
constexpr double MassNuEBar = 0.0;
192-
constexpr double MassMuonMinus = 0.1056584;
193-
constexpr double MassMuonPlus = 0.1056584;
194-
constexpr double MassNuMu = 0.0;
195-
constexpr double MassNuMuBar = 0.0;
196-
constexpr double MassTauMinus = 1.77686;
197-
constexpr double MassTauPlus = 1.77686;
198-
constexpr double MassNuTau = 0.0;
199-
constexpr double MassNuTauBar = 0.0;
200-
constexpr double MassGamma = 0.0;
201-
constexpr double MassZ0 = 91.1876;
202-
constexpr double MassWPlus = 80.377;
203-
constexpr double MassWMinus = 80.377;
204-
constexpr double MassPi0 = 0.1349768;
205-
constexpr double MassK0Long = 0.497611;
206-
constexpr double MassPiPlus = 0.1395704;
207-
constexpr double MassPiMinus = 0.1395704;
208-
constexpr double MassProton = 0.9382721;
209-
constexpr double MassProtonBar = 0.9382721;
210-
constexpr double MassNeutron = 0.9395654;
211-
constexpr double MassNeutronBar = 0.9395654;
212-
constexpr double MassK0Short = 0.497611;
213-
constexpr double MassK0 = 0.497611;
214-
constexpr double MassK0Bar = 0.497611;
215-
constexpr double MassKPlus = 0.493677;
216-
constexpr double MassKMinus = 0.493677;
217-
constexpr double MassLambda0 = 1.115683;
218-
constexpr double MassLambda0Bar = 1.115683;
219-
constexpr double MassLambda1520 = 1.519;
220-
constexpr double MassSigmaMinus = 1.197449;
221-
constexpr double MassSigmaBarPlus = 1.197449;
222-
constexpr double MassSigmaPlus = 1.18937;
223-
constexpr double MassSigmaBarMinus = 1.18937;
224-
constexpr double MassSigma0 = 1.192642;
225-
constexpr double MassSigma0Bar = 1.192642;
226-
constexpr double MassXiMinus = 1.32171;
227-
constexpr double MassXiPlusBar = 1.32171;
228-
constexpr double MassOmegaMinus = 1.67245;
229-
constexpr double MassOmegaPlusBar = 1.67245;
183+
GPUglobalconstexpr() double MassDown = 0.00467;
184+
GPUglobalconstexpr() double MassDownBar = 0.00467;
185+
GPUglobalconstexpr() double MassUp = 0.00216;
186+
GPUglobalconstexpr() double MassUpBar = 0.00216;
187+
GPUglobalconstexpr() double MassStrange = 0.0934;
188+
GPUglobalconstexpr() double MassStrangeBar = 0.0934;
189+
GPUglobalconstexpr() double MassCharm = 1.27;
190+
GPUglobalconstexpr() double MassCharmBar = 1.27;
191+
GPUglobalconstexpr() double MassBottom = 4.18;
192+
GPUglobalconstexpr() double MassBottomBar = 4.18;
193+
GPUglobalconstexpr() double MassTop = 172.5;
194+
GPUglobalconstexpr() double MassTopBar = 172.5;
195+
GPUglobalconstexpr() double MassGluon = 0.0;
196+
GPUglobalconstexpr() double MassElectron = 0.000510999;
197+
GPUglobalconstexpr() double MassPositron = 0.000510999;
198+
GPUglobalconstexpr() double MassNuE = 0.0;
199+
GPUglobalconstexpr() double MassNuEBar = 0.0;
200+
GPUglobalconstexpr() double MassMuonMinus = 0.1056584;
201+
GPUglobalconstexpr() double MassMuonPlus = 0.1056584;
202+
GPUglobalconstexpr() double MassNuMu = 0.0;
203+
GPUglobalconstexpr() double MassNuMuBar = 0.0;
204+
GPUglobalconstexpr() double MassTauMinus = 1.77686;
205+
GPUglobalconstexpr() double MassTauPlus = 1.77686;
206+
GPUglobalconstexpr() double MassNuTau = 0.0;
207+
GPUglobalconstexpr() double MassNuTauBar = 0.0;
208+
GPUglobalconstexpr() double MassGamma = 0.0;
209+
GPUglobalconstexpr() double MassZ0 = 91.1876;
210+
GPUglobalconstexpr() double MassWPlus = 80.377;
211+
GPUglobalconstexpr() double MassWMinus = 80.377;
212+
GPUglobalconstexpr() double MassPi0 = 0.1349768;
213+
GPUglobalconstexpr() double MassK0Long = 0.497611;
214+
GPUglobalconstexpr() double MassPiPlus = 0.1395704;
215+
GPUglobalconstexpr() double MassPiMinus = 0.1395704;
216+
GPUglobalconstexpr() double MassProton = 0.9382721;
217+
GPUglobalconstexpr() double MassProtonBar = 0.9382721;
218+
GPUglobalconstexpr() double MassNeutron = 0.9395654;
219+
GPUglobalconstexpr() double MassNeutronBar = 0.9395654;
220+
GPUglobalconstexpr() double MassK0Short = 0.497611;
221+
GPUglobalconstexpr() double MassK0 = 0.497611;
222+
GPUglobalconstexpr() double MassK0Bar = 0.497611;
223+
GPUglobalconstexpr() double MassKPlus = 0.493677;
224+
GPUglobalconstexpr() double MassKMinus = 0.493677;
225+
GPUglobalconstexpr() double MassLambda0 = 1.115683;
226+
GPUglobalconstexpr() double MassLambda0Bar = 1.115683;
227+
GPUglobalconstexpr() double MassLambda1520 = 1.519;
228+
GPUglobalconstexpr() double MassSigmaMinus = 1.197449;
229+
GPUglobalconstexpr() double MassSigmaBarPlus = 1.197449;
230+
GPUglobalconstexpr() double MassSigmaPlus = 1.18937;
231+
GPUglobalconstexpr() double MassSigmaBarMinus = 1.18937;
232+
GPUglobalconstexpr() double MassSigma0 = 1.192642;
233+
GPUglobalconstexpr() double MassSigma0Bar = 1.192642;
234+
GPUglobalconstexpr() double MassXiMinus = 1.32171;
235+
GPUglobalconstexpr() double MassXiPlusBar = 1.32171;
236+
GPUglobalconstexpr() double MassOmegaMinus = 1.67245;
237+
GPUglobalconstexpr() double MassOmegaPlusBar = 1.67245;
230238

231239
// END OF THE GENERATED BLOCK
232240

233241
// legacy names
234-
constexpr double MassPhoton = MassGamma;
235-
constexpr double MassMuon = MassMuonMinus;
236-
constexpr double MassPionCharged = MassPiPlus;
237-
constexpr double MassPionNeutral = MassPi0;
238-
constexpr double MassKaonCharged = MassKPlus;
239-
constexpr double MassKaonNeutral = MassK0;
240-
constexpr double MassLambda = MassLambda0;
241-
constexpr double MassHyperhydrog4 = MassHyperHydrogen4;
242-
constexpr double MassHyperhelium4 = MassHyperHelium4;
243-
constexpr double MassHyperhelium4sigma = MassHyperHelium4Sigma;
242+
GPUglobalconstexpr() double MassPhoton = MassGamma;
243+
GPUglobalconstexpr() double MassMuon = MassMuonMinus;
244+
GPUglobalconstexpr() double MassPionCharged = MassPiPlus;
245+
GPUglobalconstexpr() double MassPionNeutral = MassPi0;
246+
GPUglobalconstexpr() double MassKaonCharged = MassKPlus;
247+
GPUglobalconstexpr() double MassKaonNeutral = MassK0;
248+
GPUglobalconstexpr() double MassLambda = MassLambda0;
249+
GPUglobalconstexpr() double MassHyperhydrog4 = MassHyperHydrogen4;
250+
GPUglobalconstexpr() double MassHyperhelium4 = MassHyperHelium4;
251+
GPUglobalconstexpr() double MassHyperhelium4sigma = MassHyperHelium4Sigma;
244252

245253
// Light speed
246-
constexpr float LightSpeedCm2S = 299792458.e2; // C in cm/s
247-
constexpr float LightSpeedCm2NS = LightSpeedCm2S * 1e-9; // C in cm/ns
248-
constexpr float LightSpeedCm2PS = LightSpeedCm2S * 1e-12; // C in cm/ps
254+
GPUglobalconstexpr() float LightSpeedCm2S = 299792458.e2; // C in cm/s
255+
GPUglobalconstexpr() float LightSpeedCm2NS = LightSpeedCm2S * 1e-9; // C in cm/ns
256+
GPUglobalconstexpr() float LightSpeedCm2PS = LightSpeedCm2S * 1e-12; // C in cm/ps
249257

250258
// Light speed inverse
251-
constexpr float invLightSpeedCm2PS = 1. / LightSpeedCm2PS; // 1/C in ps/cm
259+
GPUglobalconstexpr() float invLightSpeedCm2PS = 1. / LightSpeedCm2PS; // 1/C in ps/cm
252260

253261
} // namespace o2::constants::physics
254262

‎Common/Constants/include/CommonConstants/make_pdg_header.py‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,9 @@ class Pdg(Enum):
157157
kK1_1270_0 = 10313
158158
kK1_1270Plus = 10323
159159
kCDeuteron = 2010010020
160+
kXi1820Minus = 123314 # Xi(1820)-, not in ROOT/PYTHIA PDG_t (see O2DatabasePDG.h)
161+
kXi1820Zero = 123324 # Xi(1820)0, not in ROOT/PYTHIA PDG_t (see O2DatabasePDG.h)
162+
kOmega2012Minus = 123334 # Omega(2012)-, not in ROOT/PYTHIA PDG_t (see O2DatabasePDG.h)
160163

161164

162165
dbPdg = o2.O2DatabasePDG
@@ -171,7 +174,7 @@ def mass(code):
171174

172175
def declare_mass(pdg, mass_type="double") -> str:
173176
"""Returns a C++ declaration of a particle mass constant."""
174-
return f"constexpr {mass_type} Mass{pdg.name[1:]} = {mass(pdg.value)};"
177+
return f"GPUglobalconstexpr() {mass_type} Mass{pdg.name[1:]} = {mass(pdg.value)};"
175178

176179

177180
def main():

‎Common/MathUtils/include/MathUtils/SMatrixGPU.h‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,7 @@ class MatRepSymGPU
340340

341341
static GPUdi() int off(int i)
342342
{
343-
static constexpr auto v = row_offsets_utils::make<D * D>(off1);
343+
constexpr auto v = row_offsets_utils::make<D * D>(off1);
344344
return v[i];
345345
}
346346

@@ -453,7 +453,7 @@ class SMatrixGPU
453453
GPUd() SMatrixGPU(const SMatrixGPU<T, D1, D2, R2>& rhs);
454454
template <class A, class R2>
455455
GPUd() SMatrixGPU(const Expr<A, T, D1, D2, R2>& rhs);
456-
template <class M>
456+
template <class M, class = decltype(M::mRep)>
457457
GPUd() SMatrixGPU<T, D1, D2, R>& operator=(const M& rhs);
458458
template <class A, class R2>
459459
GPUd() SMatrixGPU<T, D1, D2, R>& operator=(const Expr<A, T, D1, D2, R2>& rhs);
@@ -518,7 +518,7 @@ class SMatrixGPU
518518
R mRep;
519519
};
520520

521-
#ifndef __OPENCL__ // TODO: current C++ for OpenCL 2021 is at C++17, so no concepts. But we don't need this trick for OpenCL anyway, so we can just hide it.
521+
#if __cplusplus >= 202002L // the constraint below is a requires-clause; we do not need the trick where there are no concepts
522522
template <class T, unsigned int D1, unsigned int D2, class R, typename Y, typename X = Y>
523523
requires(sizeof(typename X::traits_type::pos_type) != 0) // do not provide a template to fair::Logger, etc... (pos_type is a member type of all std::ostream classes)
524524
GPUd() X& operator<<(Y& y, const SMatrixGPU<T, D1, D2, R>&)
@@ -684,8 +684,8 @@ GPUdi() SMatrixGPU<T, D1, D2, R>& SMatrixGPU<T, D1, D2, R>::operator=(const Expr
684684
}
685685

686686
template <class T, unsigned int D1, unsigned int D2, class R>
687-
template <class M>
688-
GPUdi() SMatrixGPU<T, D1, D2, R>& SMatrixGPU<T, D1, D2, R>::operator=(const M & rhs)
687+
template <class M, class>
688+
GPUdi() SMatrixGPU<T, D1, D2, R>& SMatrixGPU<T, D1, D2, R>::operator=(const M& rhs)
689689
{
690690
mRep = rhs.mRep;
691691
return *this;

0 commit comments

Comments
 (0)