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:
IFeedisORES_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 ofores.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 fromores.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 viaPluginBase.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.