|
Boost : |
Subject: Re: [boost] [operators] The future of Boost.Operators
From: Daniel Frey (d.frey_at_[hidden])
Date: 2013-04-25 16:50:18
On 25.04.2013, at 13:19, Daryle Walker <darylew_at_[hidden]> wrote:
>> 3) Support for constexpr if this is applicable at all. I haven't found the time to properly research it yet.
>
> I've discussed this somewhere, but this library and constexpr are incompatible. The dependency between operator?? and operator??= is backwards to what constexpr needs.
> [...]
> You can compose the regular version of an operator in a constexpr way if you have the right initialization. But the compound-assignment operators are inherently mutating, so they can never be constexpr. Defining the regular versions in terms of the compound-assignment ones bars them from being constexpr. You can reverse the dependencies to save code.
Thanks Daryle, that really helped me to get a clearer picture on the topic. I think I only have two questions left:
1) How could "reverse the dependencies" save code? Could you elaborate, please?
2) Given a set of non-constexpr overloads, could the user add even more overloads for constexpr and what is required for this to work? Example:
struct X : private df::commutative_addable< X >
{
X& operator+=( const X& );
};
constexpr X operator+( constexpr X lhs, constexpr X rhs ) {
}
is the above possible? Are there problems/conflicts? What are the requirements for the non-constexpr overloads and the signature/requirements for the user-defined constexpr-overload to play together nicely?
Best regards, Daniel
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk