The following code does not compile:
#include <boost/variant.hpp> class A {}; class B {}; class C {}; class D {}; using v1 = boost::variant<A, B>; using v2 = boost::variant<C, D>; int f(v1 const&) { return 0; } int f(v2 const&) { return 1; } int main() { return f(A{}); }
both gcc and clang complain about:
test1.cpp: In function 'int main()': test1.cpp:18:17: error: call of overloaded 'f(A)' is ambiguous return f(A{}); ^ test1.cpp:18:17: note: candidates are: test1.cpp:11:5: note: int f(const v1&) int f(v1 const&) { ^ test1.cpp:14:5: note: int f(const v2&) int f(v2 const&) {
Given that it is not possible to build the v2 object from instance A , why does the compiler give the same priority to both functions during overload resolution?
source share