[ https://issues.apache.org/jira/browse/PROTON-1138?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15168118#comment-15168118 ]
ASF subversion and git services commented on PROTON-1138: --------------------------------------------------------- Commit c7f3f558511ed07b8972304a2ba7a69dfc6b6354 in qpid-proton's branch refs/heads/master from [~aconway] [ https://git-wip-us.apache.org/repos/asf?p=qpid-proton.git;h=c7f3f55 ] PROTON-1138: Simplify comparable class, make comparable inheritance private. Simplified the comparable class. - comparable<T> is a private empty base class that exists only to instantiate operator friends of T. - comparable<T> is never used in any other way. - for any compiler with even rudimentary empty-base-class support, this has 0 run-time overhead. I did some research to try and eliminate inheritance entirely. There are 2 well known approaches. 1. boost::operators uses exactly the approach above. 2. std::rel_ops uses unconstrained templates that match anything with op == or < operator, we already agreed that approach is unsuitable for public API. I tried type-trait approaches but could not find one that was better than the above. IMO inheritance is the right fit: It has no run-time overhead, it is easy to understand, and we *want* "is-a" inheritance semantics: if `object` is comparable then sub-classes of `object` should be comparable. (That is the part that is hard to achieve with type-traits. When I realized I was trying to reinvent inheritance I decided to let go.) > Assorted C++ API cleanups > ------------------------- > > Key: PROTON-1138 > URL: https://issues.apache.org/jira/browse/PROTON-1138 > Project: Qpid Proton > Issue Type: Improvement > Components: cpp-binding > Affects Versions: 0.13.0 > Reporter: Justin Ross > Assignee: Justin Ross > Fix For: 0.13.0 > > -- This message was sent by Atlassian JIRA (v6.3.4#6332)