本计划仅覆盖新增规则与新增重载,不重复已完成的分层协议与分发基建。
-
单个
primitive的策略组规则保持不变- 同类别策略标签重复时,编译期报错。
-
两个
primitive的策略组合并规则- 先按默认策略补全四类策略(
value/type/error/concurrency)。 - 补全后两边策略组必须完全一致(忽略声明顺序),否则编译期报错。
- 先按默认策略补全四类策略(
-
两个
primitive底层类型不同时的二元操作规则- 先满足规则 2。
type::strict:编译期拒绝。type::compatible:两侧underlying category必须一致,且common_rep_traits可用且推导结果非void。type::transparent:忽略category,但common_rep_traits必须可用且推导结果非void。
-
不新增策略标签
- 维持
compatible/transparent现有策略集合,不引入新 policy。
- 维持
-
在
apply/operation层新增underlying参与重载- 支持
(primitive, underlying)。 - 若是自由函数,必须同时支持
(underlying, primitive)(左右位置都可用)。
- 支持
-
返回类型约束
- 算术类型操作结果始终返回
primitive(不返回裸underlying)。
- 算术类型操作结果始终返回
-
策略选择约束
- 混合操作中仅有一个
primitive时,type策略取该primitive的策略。 - 其余策略(
value/error/concurrency)同样取该primitive,保持策略来源单一。
- 混合操作中仅有一个
-
底层类型推导约束
- 混合操作的
underlying推导与“两侧都是 primitive”的规则一致: - 走相同的
type协商路径,使用同一套common_rep_traits可用性与非void判定。
- 混合操作的
-
src/operations/dispatcher.cppm- 增加“跨 primitive 策略组补全后一致”的编译期断言。
- 增加
compatible下category一致性判定(与common_rep可用性判定协同)。 - 补齐
common_rep非void的显式断言。
-
src/operations/operators.cppm- 为自由函数
apply/add/sub/mul/div/equal/not_equal/three_way_compare增加混合重载: (primitive, underlying)与(underlying, primitive)。- 保证非交换操作(如
sub/div/<=>)保留正确操作数顺序语义。
- 为自由函数
-
src/primitive/impl.cppm(如需)- 若存在 primitive access 的自由函数入口,同步补齐混合重载的左右位置版本。
- 成员函数形式的 access API 不做左右重载扩展。
-
tests/basic/test_operations.cpp- 新增混合重载测试:
(primitive, underlying)与(underlying, primitive)都可编译并语义正确。- 算术结果类型恒为
primitive。 - 策略组不一致时编译期失败。
strict/compatible/transparent下的跨底层类型判定符合规则 A-3。
- 所有新增约束均在编译期可判定,不引入运行期兜底分支。
- 混合操作重载完整覆盖左右操作数位置(自由函数)。
- 算术混合操作返回类型恒为
primitive。 - 混合操作的
type策略来源唯一且可预测(取 primitive 操作数)。 - 与现有行为无回归,新增正反测试通过。