I have a fairly huge library templated in floating point type allowing also for Adjoint Algorithmic Differentiation number type. This library has a custom date class and I removed the dependance of the library on this class by templating the library with a Date template parameter, specialized when concrete code is need, allowing for other date classes as far as they subscribe to my date class (fairly generic) api …
… and at compilation I have tons of errors, all regarding templates, errors that I don’t understand. The first error spotted by the compiler seems to be :
1>C:Program FilesMicrosoft Visual Studio2022ProfessionalVCToolsMSVC14.39.33519includexmemory(556,37): error C2825: '_Alloc': must be a class or namespace when followed by '::'
1>(compiling source file '/MyLibBlackScholesPricingTests.cpp')
1>C:Program FilesMicrosoft Visual Studio2022ProfessionalVCToolsMSVC14.39.33519includexmemory(556,37):
1>the template instantiation context (the oldest one first) is
1> C:CODINGBB_REPOS_TAFOverFolderMyLibMyLibMyLibGoogleTestMyLibBlackScholesPricingTests.cpp(229,64):
1> while processing the default template argument of 'std::unique_ptr<MyLib::PricingEngines::MyLibEngine<MyLib::DatesSchedulesEtc::MyLibDate,double>,std::default_delete<MyLib::PricingEngines::MyLibEngine<MyLib::DatesSchedulesEtc::MyLibDate,double>>>::unique_ptr(std::unique_ptr<_Ux,_Dx> &&) noexcept'
1> C:Program FilesMicrosoft Visual Studio2022ProfessionalVCToolsMSVC14.39.33519includememory(3214,20):
1> see reference to variable template 'const bool conjunction_v<std::negation<std::is_array<MyLib::PricingEngines::MonteCarlo::MyLibMCEngine<MyLib::DatesSchedulesEtc::MyLibDate> > >,std::is_convertible<MyLib::PricingEngines::MonteCarlo::MyLibMCEngine<MyLib::DatesSchedulesEtc::MyLibDate> *,MyLib::PricingEngines::MyLibEngine<MyLib::DatesSchedulesEtc::MyLibDate,double> *>,std::is_convertible<std::default_delete<MyLib::PricingEngines::MonteCarlo::MyLibMCEngine<MyLib::DatesSchedulesEtc::MyLibDate> >,std::default_delete<MyLib::PricingEngines::MyLibEngine<MyLib::DatesSchedulesEtc::MyLibDate,double> > > >' being compiled
1> C:Program FilesMicrosoft Visual Studio2022ProfessionalVCToolsMSVC14.39.33519includememory(3214,20):
1> see reference to class template instantiation 'std::is_convertible<MyLib::PricingEngines::MonteCarlo::MyLibMCEngine<MyLib::DatesSchedulesEtc::MyLibDate> *,_Ty *>' being compiled
1> with
1> [
1> _Ty=MyLib::PricingEngines::MyLibEngine<MyLib::DatesSchedulesEtc::MyLibDate,double>
1> ]
regarding the following piece of code :
std::unique_ptr<PR2PricingEngine<PR2Date, double>> eng =
std::make_unique<PR2MCEngine<PR2Date>>(num.nb_paths_, rng, isParallel);
which initially (because templating) was :
std::unique_ptr<PR2PricingEngine<double>> eng =
std::make_unique<PR2MCEngine>(num.nb_paths_, rng, isParallel);
I really don’t see what the issue could be, even after checking compiler output.
1