Story: Hotfix: Windows link fails on missing IFeed ctor/dtor exports

Table of Contents

This page documents a story in Sprint 25. It captures the goal, current status, acceptance criteria, and the tasks that compose it.

1. Goal

Restore the Windows CI build: make ores.marketdata.api.dll export IFeed's default ctor and virtual dtor so consumers (ores.synthetic.api feeds) can import them.

2. Status

Field Value
State DONE
Parent sprint Sprint 25
Now Nothing.
Waiting on Nothing.
Next Nothing.
Last touched 2026-08-16

3. Acceptance

  • The Windows CI build links ores.synthetic.api.dll in all three configs.
  • IFeed remains abstract and header-declarable; consumers unchanged.

4. Tasks

Task State Start End Description
Scaffold story: Hotfix: Windows link fails on missing IFeed ctor/dtor exports DONE 2026-08-16 2026-08-16 Story scaffolding rides this task: documents, sprint wiring, and the scaffold PR. Close it before merging that PR.
Implement Hotfix: Windows link fails on missing IFeed ctor/dtor exports DONE 2026-08-16 2026-08-18 Initial task for: Hotfix: Windows link fails on missing IFeed ctor/dtor exports

5. Decisions

  • Root cause: IFeed is ORES_MARKETDATA_API_EXPORT (dllimport in consumers) with inline-defaulted default ctor and virtual dtor. The class is abstract and never constructed or destroyed inside the producer, so the producer never emits or exports the special members; consumers (fx_spot_feed, ir_curve_feed) import them, and Windows fails at the link of ores.synthetic.api.dll.
  • Fix: define both special members out-of-line in the producer (domain/i_feed.cpp) rather than in the header — the class-level export macro exports them from ores.marketdata.api.dll. Consumers unchanged.
  • IPlugin (ores.qt) has the same latent shape (abstract, exported, inline-defaulted virtual dtor); the in-tree build is unaffected (the producer odr-uses the ctor via PluginBase.cpp), so it is tracked as a follow-up, not part of this hotfix.

6. Out of scope

7. Result

Implemented and merged as PR #1988 (scaffold PR #1987 merged first). IFeed's default ctor and virtual dtor are defined out-of-line in the producer (domain/i_feed.cpp), so the class-level export macro exports them from ores.marketdata.api.dll; the undefined-symbol link failure of ores.synthetic.api.dll (red for 8 consecutive Windows runs) is healed in all three configs. Linux build and tests pass; the scheduled Continuous Windows run after merge is the Windows-side confirmation.

Emacs 29.3 (Org mode 9.6.15)