@@ -62,17 +62,22 @@ void FxEuropeanBarrierOption::build(const QuantLib::ext::shared_ptr<EngineFactor
6262 Real level = barrier_.levels ()[0 ].value ();
6363 Real rebate = barrier_.rebate ();
6464 QL_REQUIRE (rebate >= 0 , " Rebate must be non-negative" );
65-
66- auto fxEuropeanBarrierOptionBuilder =
67- QuantLib::ext::dynamic_pointer_cast<FxEuropeanBarrierOptionEngineBuilder>(engineFactory->builder (tradeType_));
65+ QuantLib::ext::shared_ptr<FxEuropeanBarrierOptionScriptedEngineBuilder> fxEuropeanBarrierOptionBuilder;
66+ try {
67+ fxEuropeanBarrierOptionBuilder = QuantLib::ext::dynamic_pointer_cast<FxEuropeanBarrierOptionScriptedEngineBuilder>(
68+ engineFactory->builder (tradeType_));
69+ DLOG (" FxEuropeanBarrierOptionScriptedEngineBuilder found for trade " << tradeType_);
70+ } catch (...) {
71+ // no delegating builder found
72+ }
6873 if (fxEuropeanBarrierOptionBuilder) {
6974 // We have a delegating builder for this trade
7075 auto delegatingBuilderTrade_ = fxEuropeanBarrierOptionBuilder->build (this , engineFactory);
7176 instrument_ = delegatingBuilderTrade_->instrument ();
7277 maturity_ = delegatingBuilderTrade_->maturity ();
7378 npvCurrency_ = delegatingBuilderTrade_->npvCurrency ();
7479 additionalData_ = delegatingBuilderTrade_->additionalData ();
75- requiredFixings_ = delegatingBuilderTrade_->requiredFixings ();
80+ requiredFixings_ = delegatingBuilderTrade_->requiredFixings ();
7681 setSensitivityTemplate (delegatingBuilderTrade_->sensitivityTemplate ());
7782 addProductModelEngine (delegatingBuilderTrade_->productModelEngine ());
7883
0 commit comments