On Saturday, March 5, 2016 at 10:15:59 AM UTC-6, Steven Watanabe wrote:
AMDG
On 03/05/2016 01:36 AM, Vicente J. Botet Escriba wrote:
Le 05/03/2016 01:11, Paul Fultz II a écrit :
On Friday, March 4, 2016 at 5:19:52 PM UTC-6, Steven Watanabe wrote:
On 03/04/2016 11:55 AM, Vicente J. Botet Escriba wrote:
#include
struct identity { template<class T> T operator()(T t) { return t; } };
int main() { boost::fit::conditional(identity(), identity())(0); }
1> boost\fit\conditional.hpp(84): error C2500: 'boost::fit::detail::conditional_kernel
': 'identity' is already a
direct base class 1> with 1> [ 1> F1=identity, 1> F2=identity 1> ] 1>
This is by design. I should document this. It makes absolutely no sense to pass the same function to conditional, and is most likely a mistake in the users code.
I disagree that this makes no sense. It would be true if we were talking about match, but for conditional, this degenerate case has a clear meaning, since conditional chooses the first possible function. Forbidding it creates a special case, and special cases are bad for generic code. Of course, my example is a bit silly, because I was trying to create a minimal reproduction, but it's quite possible to have a situation where you don't know and don't care whether the arguments are the same type.
I see, so in generic code this could be a problem. I'll open an issue to update this.