viboes / std-make

C++ generic make factory

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

overload: ambiguous for compatible types

pitti98 opened this issue · comments

If you use final function objects to overload on types that are implicitly convertible to each other the overload becomes ambiguous.

Example:

struct X;
struct Y {
//	Y(const X&){} // enable this to fail
};
struct X {
//	operator Y() const { return Y(); }  // or enable this to fail
};

struct Foo final { void operator()(X) const { printf("X\n"); } };
struct Bar final { void operator()(Y) const { printf("Y\n"); } };
int main()
{
	auto ol = std::experimental::overload(Foo(), Bar());
	ol(X());
	return 0;
}

This ticket was opened as requested on https://github.com/viboes/tags/issues/7.

As discussed on the linked issue, I don't know how to fix it with the C++17. We will need something else in the language to fix it.

We could as well either forbid the overload of final function objects, to avoid surprises.
We will see what the committee think of this.

Thanks for catching this issue.
BTW, I will need your name if you agree I use it on any associated paper.

BTW, I will need your name if you agree I use it on any associated paper.

Uhh, sure, go ahead.

We will see what the committee think of this.

Interesting to see, indeed.